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
添加回答
舉報