我有一个每日价格变化的产品清单。我想通过在不同的时间(每月,每年,...)重新采样来计算产品的价格变化。但是我在第一个时间序列上得到了一个计算错误。
以下是我的两个产品的数据帧示例:
df_change = pd.DataFrame({'date':['2020-04-01', '2020-04-02', '2020-04-03', '2020-04-04', '2020-04-05', '2020-04-01', '2020-04-02', '2020-04-03', '2020-04-04', '2020-04-05'],
'price' : [20, 30, 40, 10, 15, 200, 220, 230, 200, 190],
'symbol': ['AI', 'AI', 'AI', 'AI', 'AI', 'PR', 'PR', 'PR', 'PR', 'PR']
})
datetime_series = pd.to_datetime(df_change['date'])
以下是每种产品2天重采样的平均价格:
df_change.groupby('symbol').resample('2D').mean():
AI 2020-04-01 25
2020-04-03 25
2020-04-05 15
PR 2020-04-01 210
2020-04-03 215
2020-04-05 190
并计算这些价格的变化:
df_change.groupby('symbol').resample('2D').mean().pct_change()
AI 2020-04-01 NaN
2020-04-03 0.000000
2020-04-05 -0.400000
PR 2020-04-01 13.000000 <=== not correct
2020-04-03 0.023810
2020-04-05 -0.116279
但是第一个时间序列"13.000“的产品"PR”的变化是不正确的。改变应该是像第一个产品AI一样的NaN。
PR的变化量"13“是用前一产品AI的最后一次时间序列计算出来的。13 = (210 - 15) / 15
我如何才能正确计算每个产品的每个第一时间序列的变化?(那就是Nan)
发布于 2021-05-11 14:56:34
在计算滚动mean
后执行额外的groupby
操作,以计算百分比变化
avg = df_change.groupby('symbol').resample('2D').mean()
avg_change = avg.groupby('symbol').pct_change()
或者,您可以在groupby
对象的apply
方法内执行resample
、mean
和calculate pct_change
avg_change = df_change.groupby('symbol').apply(lambda x: x.resample('2D').mean().pct_change())
>>> avg_change
price
symbol date
AI 2020-04-01 NaN
2020-04-03 0.000000
2020-04-05 -0.400000
PR 2020-04-01 NaN
2020-04-03 0.023810
2020-04-05 -0.116279
https://stackoverflow.com/questions/67489157
复制相似问题