首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按物料组计算正确的变化?

如何按物料组计算正确的变化?
EN

Stack Overflow用户
提问于 2021-05-11 22:47:59
回答 1查看 36关注 0票数 1

我有一个每日价格变化的产品清单。我想通过在不同的时间(每月,每年,...)重新采样来计算产品的价格变化。但是我在第一个时间序列上得到了一个计算错误。

以下是我的两个产品的数据帧示例:

代码语言:javascript
运行
复制
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天重采样的平均价格:

代码语言:javascript
运行
复制
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

并计算这些价格的变化:

代码语言:javascript
运行
复制
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)

EN

回答 1

Stack Overflow用户

发布于 2021-05-11 22:56:34

在计算滚动mean后执行额外的groupby操作,以计算百分比变化

代码语言:javascript
运行
复制
avg = df_change.groupby('symbol').resample('2D').mean()
avg_change = avg.groupby('symbol').pct_change()

或者,您可以在groupby对象的apply方法内执行resamplemean和calculate pct_change

代码语言:javascript
运行
复制
avg_change = df_change.groupby('symbol').apply(lambda x: x.resample('2D').mean().pct_change())

代码语言:javascript
运行
复制
>>> 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67489157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档