我如何在熊猫的几个月之间分配价值?

我有以下数据框:


    start_date delta   

    2018-06-30  2    

    2018-06-30  2    

    2018-06-30  2    

    2018-06-30  2    

    2018-06-30  4    

    2018-07-31  4    

    2018-07-31  2    

    2018-07-31  6   

我会得到这样的数据框:


start-date delta

2018-06-30   1

2018-07-31   1


2016-06-30   1

2016-07-31   1

 ...

# (there was 2018-06-30 with delta = 4)

2018-06-30   1

2018-07-31   1

2018-08-30   1

2018-09-30   1

 and so on...

我不需要空格,它只是为了可视化。

所以我每个月都需要扩展 delta。在输出中,delta 列的每个值都必须等于 1。

我该怎么做?


慕哥9229398
浏览 193回答 1
1回答

一只斗牛犬

如果我理解正确的话,“delta”列中的每个值都是从“start_date”开始的月数。在结果中,“delta”列必须只包含一个,所以它并不重要,可以稍后添加。考虑到“start_date”列中的值是 datetime64 类型,这是我想出的:np.hstack((df.apply(lambda row: pd.date_range(row['start_date'], periods=row['delta'], freq='m'), axis=1).values))此代码转换问题中的数据框:  start_date  delta0 2018-06-30      21 2018-06-30      22 2018-06-30      23 2018-06-30      24 2018-06-30      45 2018-07-31      46 2018-07-31      27 2018-07-31      6进入一维日期数组:array(['2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',       '2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',       '2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',       '2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',       '2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',       '2018-08-31T00:00:00.000000000', '2018-09-30T00:00:00.000000000',       '2018-07-31T00:00:00.000000000', '2018-08-31T00:00:00.000000000',       '2018-09-30T00:00:00.000000000', '2018-10-31T00:00:00.000000000',       '2018-07-31T00:00:00.000000000', '2018-08-31T00:00:00.000000000',       '2018-07-31T00:00:00.000000000', '2018-08-31T00:00:00.000000000',       '2018-09-30T00:00:00.000000000', '2018-10-31T00:00:00.000000000',       '2018-11-30T00:00:00.000000000', '2018-12-31T00:00:00.000000000'],      dtype='datetime64[ns]')可用于创建新数据框,即:df2 = pd.DataFrame()df2['start_date'] = np.hstack((df.apply(lambda row: pd.date_range(row['start_date'], periods=row['delta'], freq='m'), axis=1).values))df2['delta'] = 1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python