2017-04-21 50 views
2

我想了解平均,总和函数与cumprod函数之间的差异。
当我运行一个groupby,然后意味着,我得到id列和平均值的预期。 enter image description here输出的熊猫groupby与cumprod没有显示groupby列

虽然我用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() 
+1

'ID = 'A', 'A', 'A', 'B', 'B',“B ']' - 这是一个非常可怕的想法。切勿调用变量'id',因为'id()'是一个内置函数。 – DyZ

回答

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值)的Series。

groupby/transform操作返回一个与 原始DataFrame相同数字行的系列,df。 (cumprod是累计产品的缩写,因为它返回 这些产品的运行总数,所以每行有一个值)。由于原始DataFrame的每一行都有一个值,所以索引自然不能是groupby键。它必须保持 是原始DataFrame的索引。

0

原因在于函数意味着什么()和cumprod()意味着做什么。 均值:“返回值的平均值为请求的轴” Cumprod:“返回的累积产在请求轴”

这样的意思是指返回一个值给定轴,而cumprod会发现的产品累计值。

如果要比较其是否工作或没有,你可以从指数3比较

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'

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