2016-04-04 144 views
1

我有一個數據幀,看起來像這樣:分組數據框並按組計算歸一化標準偏差?

  product cost_per_quantity 
12779 0101010G0BB   160.788357 
12653 0101010G0BC   179.493956 
10390 0101010I0AA   0.425916 
20361 0101010I0AA   0.603650 
22504 0101010I0AA   0.633082 

與創造:

df = pd.DataFrame({ 'product': ['0101010G0BB', '0101010G0BC', '0101010I0AA', '0101010I0AA', '0101010I0AA'], 'cost_per_quantity': [160.788357, 179.493956, 0.425916, 0.603650, 0.633082]}) 

現在我想找到所需的產品與cost_per_quantity的最大變化。例如,我想檢查產品0101010I0AA,並在其三個條目中找到cost_per_quantity的標準化標準差,然後將其與其他產品的標準化標準差進行比較。

解決這個問題的最好方法是什麼?我試過:

df1 = df.groupby('product').agg(np.std) 

但這只是給了我一堆NaN s。

+1

我認爲公式是正確的,但對於兩組你只有1個觀測值,你不能計算標準偏差。 – ayhan

+2

對於總體標準偏差,您可以使用'df.groupby('product')。std(ddof = 0)',這將爲1個觀察組返回0。其實'ddof = 0'是'np.std'的默認值,但我認爲熊貓正在重寫'agg'中的值。 – ayhan

+0

@ayhan謝謝!我認爲這是返回原始s.d.雖然,沒有正常化 - 任何想法如何可能會返回正常化的s.d.? – Richard

回答

1

對於聚合df.groupby('product').agg(np.std)是正確的,但對於1-觀察組,這返回NaN,因爲無法爲1-觀察組計算樣本標準偏差。標準偏差的Numpy默認值是總體標準偏差,但我認爲Pandas正在壓倒這一點。

你可以用人口標準偏差去得到0這些羣體。

如果你想看到相對於平均值的相對偏差,您可以使用coefficient of variation

df.groupby('product').apply(lambda x: np.std(x)/np.mean(x)) 

現在np.std是一個lambda函數,它的行爲如預期。