首页 > 解决方案 > 通过时间查找每个项目和 ID 的平均值(Python)

问题描述

问题如下。假设我有一个这样的数据框:

物品 事件 销售量
1 一个 130
1 156
1 C 108
2 150
2 D 118
... ... ...

在这个数据帧中,事件A首先是时间,然后是 B,然后是 C,依此类推。我现在想要一个平均每个 item-id 组合随着时间的推移。这意味着对于项目 1 事件 A,平均值仅为 130。对于项目 1 和事件 B,平均值应为 (130+156)/2 = 143。但对于项目 2,事件 B,平均值为 150,对于项目 2 和事件 D,平均值为 (130+118)/2 = 124。

所以结果应该是这样的:

物品 事件 销售量
1 一个 130
1 143
1 C 131.33
2 150
2 D 124
... ... ...

这可能没有循环吗?我们可以通过某种方式与一个小组一起做这个吗?

提前致谢!

标签: pythonpandas

解决方案


使用Expanding.meanwithSeries.reset_index删除第一级MultiIndex以正确对齐新列:

df['new'] = df.groupby('item')['sales'].expanding().mean().reset_index(level=0, drop=True)
print (df)
   item event  sales         new
0     1     A    130  130.000000
1     1     B    156  143.000000
2     1     C    108  131.333333
3     2     B    150  150.000000
4     2     D    118  134.000000

推荐阅读