对于
pandas
数据框中的每一行,我想计算:与至少 n
(比如 2)天前的行相比,变化的分数是多少。我想使用 shift()
而不是 for
循环来实现这一点。下面的例子:
x change
Date
2024-04-01 1 0.00000
2024-04-05 2 1.00000 # (2-1) / 1
2024-04-06 3 2.00000 # (3 - 1) / 1
2024-04-07 4 1.00000 # (4 - 2) / 2
2024-04-08 5 0.66666 # (5 - 3) / 3
2024-04-09 6 0.50000 # (6 - 4) / 4
您可以使用
merge_asof
:
df.index = pd.to_datetime(df.index)
x2 = pd.merge_asof(df[[]], df[['x']].shift(freq='2D'),
left_index=True, right_index=True,
direction='backward'
)['x'].reindex(df.index)
df['change'] = (df['x']-x2)/x2
输出:
x change
Date
2024-04-01 1 NaN
2024-04-05 2 1.000000
2024-04-06 3 2.000000
2024-04-07 4 1.000000
2024-04-08 5 0.666667
2024-04-09 6 0.500000