1 回答

TA贡献1784条经验 获得超2个赞
如果我理解正确的话,“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 delta
0 2018-06-30 2
1 2018-06-30 2
2 2018-06-30 2
3 2018-06-30 2
4 2018-06-30 4
5 2018-07-31 4
6 2018-07-31 2
7 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
添加回答
举报