输出pandas groupby,cumprod不显示groupby列

时间:2017-04-21 21:00:51

标签: python pandas

我试图理解均值,求和函数与cumprod函数之间的区别 当我运行groupby然后运行mean时,我得到id列和值的平均值。 enter image description here

当我用cumprod运行它时,没有groupby列。如何确保我可以获取我正在分组的列 enter image description here

x = [.25,.23,.55,.89,-.90,-.04]
id = ['a', 'a', 'a', 'b', 'b', 'b']
df.groupby('id').mean()
df.groupby('id').cumprod()

3 个答案:

答案 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