【发布时间】:2021-12-21 19:10:32
【问题描述】:
给定一个数据框df,如下:
import pandas as pd
import numpy as np
np.random.seed(2021)
dates = pd.date_range('20130101', periods=720)
df = pd.DataFrame(np.random.randint(0, 100, size=(720, 3)), index=dates, columns=list('ABC'))
df
输出:
A B C
2013-01-01 85 57 0
2013-01-02 94 86 44
2013-01-03 62 91 29
2013-01-04 21 93 24
2013-01-05 12 70 70
.. .. ..
2014-12-17 38 42 20
2014-12-18 67 93 47
2014-12-19 27 10 74
2014-12-20 18 92 62
2014-12-21 90 40 31
如何将 B 和 C 列向前移动一年?谢谢。请注意闰年问题。
下面的代码似乎适用于示例数据,但对于在B 和C 内包含NaNs 的真实数据,它会生成:ValueError: cannot reindex from a duplicate axis:
df[['B', 'C']] = df[['B', 'C']].shift(freq=pd.DateOffset(years=1))
print(df)
输出:
A B C
2013-01-01 85 NaN NaN
2013-01-02 94 NaN NaN
2013-01-03 62 NaN NaN
2013-01-04 21 NaN NaN
2013-01-05 12 NaN NaN
.. ... ...
2014-12-17 38 33.0 79.0
2014-12-18 67 24.0 53.0
2014-12-19 27 54.0 39.0
2014-12-20 18 68.0 80.0
2014-12-21 90 65.0 65.0
【问题讨论】:
标签: python-3.x pandas dataframe numpy datetime