python-3.x - 在 Pandas 中将多个每日价值列向前移动一年
问题描述
给定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
一年?谢谢。请注意闰年问题。
下面的代码似乎适用于示例数据,但对于NaN
内部带有 sB
和的真实数据C
,它会生成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
解决方案
下面的代码似乎有效:
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 - 有没有办法使用多核进行多线程处理?
- flutter - 如何在颤动中根据日期和时间对地图列表进行排序
- mongodb - localhost 无法通过 docker 容器加载烧瓶应用程序
- foreach - SwiftUI - 绑定到选择器的变量与选择器的选定值不匹配
- swift - 如何投射 FetchedResults
从@FetchRequest 到 [Obj]? - c# - 如何在 blazor 中使用 select2 组件?
- java - 从扫描仪,java计算单词中的字母
- reactjs - MDBReact 表更改标签区域设置
- android - 如何在 Android 上从 React Native 访问光传感器数据
- python - 将 python 包发布到 pypi 时自动递增版本