我试图理解均值,求和函数与cumprod函数之间的区别 当我运行groupby然后运行mean时,我得到id列和值的平均值。
当我用cumprod运行它时,没有groupby列。如何确保我可以获取我正在分组的列
x = [.25,.23,.55,.89,-.90,-.04]
id = ['a', 'a', 'a', 'b', 'b', 'b']
df.groupby('id').mean()
df.groupby('id').cumprod()
答案 0 :(得分:5)
df.groupby('id').mean()
是df.groupby('id').agg('mean')
的缩写。
df.groupby('id').cumprod()
是df.groupby('id').transform('cumprod')
的缩写。
这里的关键区别是前者是groupby/agg
操作,而后者是groupby/transform
操作。
groupby/agg
将每个组聚合为一个值。因此,groupby/agg
操作可以返回其索引包含groupby键的系列(在本例中为id
值)。
groupby/transform
操作返回一个与行数相同的系列
原始DataFrame,df
。 (cumprod
是累积产品的缩写。因为它返回
运行的产品总数,每行有一个值)。由于每一行都有一个值
原始的DataFrame,自然索引不能是groupby键。它必须保留
是原始DataFrame的索引。
答案 1 :(得分:0)
原因在于mean()和cumprod()的功能是什么。 平均值:"返回请求轴的值的平均值" Cumprod:"在请求的轴上返回累积产品"
所以意味着返回给定轴的一个值,而cumprod会累积地找到值的乘积。
如果你想比较它是否有效,你可以比较
df.x.cumprod()
0 0.250000
1 0.057500
2 0.031625
3 0.028146
4 -0.025332
5 0.001013
VS
df.groupby('index').x.cumprod()
0 0.250000
1 0.057500
2 0.031625
3 0.890000
4 -0.801000
5 0.032040
分组结果从代表索引=' b'
的索引3变化答案 2 :(得分:0)
与mean()
不同,cumprod()
(将系列转换为单个数字)不是聚合器,而是将系列转换为另一个系列。原始数据框中行的数量和顺序与cumprod()
结果中的行数相同。您可以将结果合并到原始数据框中,并可以访问id
:
df['x_cumprod'] = df.groupby('id').cumprod()
# id x x_cumprod
#0 a 0.25 0.25000
#1 a 0.23 0.05750
#2 a 0.55 0.55000
#3 b 0.89 0.48950
#4 b -0.90 -0.44055
#5 b -0.04 -0.00230