我在DataFrame
中有以日期时间为索引的数据。对于每个日期,我想将pct_change
计算为上一年的数字。
import pandas as pd
import numpy as np
idx = pd.date_range('2019-01-01', periods=1000)
df = pd.DataFrame(np.arange(1000), index=idx)
但是,我不要在同一天和同一月计算“上一年”。相反,我想将2020
中的每一天与2019
中具有相同星期几的第一天进行比较。我是什么意思?
在2020年,1月1日是星期三。在2019年,第一个星期三是1月2日。因此,每周的差异为[value at 2020-01-01]/[value at 2019-01-02]
。
因此,对于2020-2019年比较,我只需要知道+1的正偏移量即可,因此每次比较都需要[365-1]天。任何两年的通用解决方案是什么?
答案 0 :(得分:1)
这可以做到:
s = df.groupby([df.index.year, df.index.dayofweek]).cumcount()
shifted = df.groupby([s, df.index.dayofweek]).shift()
shifted.loc['2020-01-01']
# 0 1.0
# Name: 2020-01-01 00:00:00, dtype: float64