2017-04-21 175 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