Pandas - 使用列作为偏移量的日期差异
Pandas - Date Difference Using Column as Offset
我有一个包含两列的 df
:日期和偏移量(整数值)。我想从日期中减去月数(基于列值)并获得月末日期。我试过:
df['NewDate'] = df['Date'] - relativedelta(months=df['Offset'])
和:
df['NewDate'] = df.apply(lambda x: x['Date']-pd.offsets.MonthEnd(months=x['Offset']), axis=1)
但两者都无法正常工作(由于 df.apply 无论如何,第二个运行速度非常慢)。
Orig df
Date Offset
12/31/17 0
12/31/17 1
12/31/17 2
12/31/17 3
New df
Date Offset NewDate
12/31/17 0 12/31/17
12/31/17 1 1/31/18
12/31/17 2 2/28/18
12/31/17 3 3/31/18
您可以使用 numpy
来获得更快的解决方案:
df['NewDate'] = df['Date'].values.astype('datetime64[M]') +
df['Offset'].add(1).values.astype('timedelta64[M]') -
np.array([1], dtype='timedelta64[D]')
print (df)
Date Offset NewDate
0 2017-12-31 0 2017-12-31
1 2017-12-31 1 2018-01-31
2 2017-12-31 2 2018-02-28
3 2017-12-31 3 2018-03-31
我有一个包含两列的 df
:日期和偏移量(整数值)。我想从日期中减去月数(基于列值)并获得月末日期。我试过:
df['NewDate'] = df['Date'] - relativedelta(months=df['Offset'])
和:
df['NewDate'] = df.apply(lambda x: x['Date']-pd.offsets.MonthEnd(months=x['Offset']), axis=1)
但两者都无法正常工作(由于 df.apply 无论如何,第二个运行速度非常慢)。
Orig df
Date Offset
12/31/17 0
12/31/17 1
12/31/17 2
12/31/17 3
New df
Date Offset NewDate
12/31/17 0 12/31/17
12/31/17 1 1/31/18
12/31/17 2 2/28/18
12/31/17 3 3/31/18
您可以使用 numpy
来获得更快的解决方案:
df['NewDate'] = df['Date'].values.astype('datetime64[M]') +
df['Offset'].add(1).values.astype('timedelta64[M]') -
np.array([1], dtype='timedelta64[D]')
print (df)
Date Offset NewDate
0 2017-12-31 0 2017-12-31
1 2017-12-31 1 2018-01-31
2 2017-12-31 2 2018-02-28
3 2017-12-31 3 2018-03-31