2016-05-16 312 views
2

我想下面的例子中,在那裏我需要列:大熊貓GROUPBY在列

import pandas as pd 
import numpy as np 

y = pd.DataFrame(np.random.randint(0,10, (20,30)).astype(float), 
       columns = pd.MultiIndex.from_tuples(
        list(zip(np.arange(30), 
          np.random.randint(0,10, (30,)))) 
       )) 
y.T.groupby(level = 1).agg(lambda x: np.std(x)/np.mean(x)) 

和它的作品。但是,以下返回一個錯誤:

y.groupby(level = 1, axis = 1).agg(lambda x: np.std(x)/np.mean(x)) 

我錯過了什麼嗎?


UPD:繼時,分別採取工程:

y.groupby(level = 1, axis = 1).agg(np.std)/\ 
    y.groupby(level = 1, axis = 1).agg(np.mean) 
+1

這似乎是一個錯誤。 (我能夠重現一個不同的數據集,這個數據集在列上有多個索引,每當你使用調用numpy函數的lambda函數,它會給出相同的錯誤。)也許嘗試提交一個錯誤報告? https://github.com/pydata/pandas/issues – ayhan

+0

我會去做的。只是覺得我太頻繁地竊聽它們;) –

回答

0

groupby函數應用於逐列到你的數據幀,然而,當數據幀被調換,行成列,反之亦然。

這不會是一個問題,如果它不是因爲你的行和列都不是多索引。但是,由於您通過level=1屬性將您的行索引視爲多索引,因此會出現該錯誤。

此外,如果你被行試圖組,你應該有axis=0

y.groupby(y.index, axis = 0).agg(lambda x: np.std(x)/np.mean(x)) 
+0

「通過level = 1屬性將[行...]索引視爲多索引,[導致]錯誤」的說法並不正確。它是熊貓的功能。請參閱更新。我知道行和列之間的區別(請參閱問題的標題)。我的問題是錯誤的來源是什麼。 –