2012-07-15 76 views
3

我打在熊貓的角落案件。我正在嘗試使用agg fn,但沒有進行groupby。說我想對整個dataframe聚集,即如何在Pandas的一組空白列上做groupby?

from pandas import * 
DF = DataFrame(randn(5,3), index = list("ABCDE"), columns = list("abc")) 
DF.groupby([]).agg({'a' : np.sum, 'b' : np.mean }) # <--- does not work 

而且DF.agg({'a' ... })也不起作用。

我的解決方法是做DF['Total'] = 'Total'然後做一個DF.groupby(['Total'])但這似乎有點人爲。

有沒有人有更清潔的解決方案?

回答

3

它沒有那麼大任,但這種情況下,如果你傳遞一個函數返回true至少它不會要求改變df

>>> from pandas import * 
>>> df = DataFrame(np.random.randn(5,3), index = list("ABCDE"), columns = list("abc")) 
>>> df.groupby(lambda x: True).agg({'a' : np.sum, 'b' : np.mean }) 
      a   b 
True 1.836649 -0.692655 
>>> 
>>> df['total'] = 'total' 
>>> df.groupby(['total']).agg({'a' : np.sum, 'b' : np.mean }) 
       a   b 
total      
total 1.836649 -0.692655 

你可以用它代替lambda x: True各種內建但他們不那麼明確,只能意外地工作。

2

有一個類似的DataFrame.aggregate方法是一個好主意。在這裏創建一個問題:

https://github.com/pydata/pandas/issues/1623

+0

酷@Wes麥金尼 - 或許你也可以讓DF.groupby([])返回DF? Thx – joelhoro 2012-07-15 21:00:10

+0

我還注意到,對於某些函數,如'np.std',這會產生一個錯誤:'IndexError:0-d數組不能被索引。它似乎窒息了熊貓系列的額外結構。如果使用'lambda x:np.std(x.values)'作爲傳入函數,則會修復它。但似乎這應該是熊貓的責任。也許嘗試趕上某種事情,如果不工作,那麼也可以嘗試在放棄之前將其應用於column.values?避免這種情況可能有很好的理由;只是一個建議。 – ely 2012-07-15 22:38:59

+0

@EMS你能報告一個重現你所看到的問題嗎? – 2012-07-16 16:33:36