2016-05-13 126 views
3

我在pandas中使用groupby來計算pandas中某些數據框中的列使用層次索引組織的聚合統計信息。 對於計算出來的統計數據,我希望最終返回到表格表格,其中組被重新轉換爲具有組值的列,例如,如:在pandas中使用groupby時還原層次列索引

index = pd.MultiIndex.from_tuples([('A', 'a'), ('B', 'b')]) 
df = pd.DataFrame(np.random.randn(8,2), columns=index) 

這導致例如,這個數據幀

  A   B 
      a   b 
0 0.511157 0.334748 
1 0.031113 -0.477456 
2 0.288080 -0.258238 
3 0.138467 -0.955547 
4 -0.087873 0.017494 
5 -0.667393 1.190039 
6 -0.068245 -1.282864 
7 -0.996982 0.589667 

現在我計算使用GROUPBY的統計數據和重置索引重新建立一個扁平的數據幀:

df.groupby([('A','a')]).mean().reset_index() 
    (A, a)   B 
        b 
0 -0.996982 0.589667 
1 -0.667393 1.190039 
2 -0.087873 0.017494 
3 -0.068245 -1.282864 
4 0.031113 -0.477456 
5 0.138467 -0.955547 
6 0.288080 -0.258238 
7 0.511157 0.334748 

我怎樣才能做到這一點('A', 'a')成爲多指數的一部分再次,希望以自動方式?或者另有說明:有沒有一種方法可以在groupby操作期間保留分層列結構。

+0

IIUC您可以重新分配的列值索引。 'dfs = df.groupby([('A','a')])。mean()。reset_index()'和'dfs.columns = index' – Abbas

+0

@Abbas但是如果我做更復雜的分組,確保訂單始終保留? – languitar

+0

爲自己嘗試,它將被保留。 – Abbas

回答

4

爲我工作參數添加到as_index=Falsegroupby

print df.groupby([('A','a')], as_index=False).mean() 
      A   B 
      a   b 
0 -0.765088 -0.556601 
1 -0.628040 2.074559 
2 -0.516396 -2.028387 
3 -0.152027 0.389853 
4 0.450218 1.474989 
5 0.718040 -0.882018 
6 1.932556 -0.977316 
7 2.028468 -0.875167 
+0

不錯,我不知道這可以在'groupby'函數中控制。 – languitar

2

做最簡單的事情是重新分配回原來的列:

In [182]: 
df1 = df.groupby([('A','a')]).mean().reset_index() 
df1.columns = df.columns 
df1 

Out[182]: 
      A   B 
      a   b 
0 -0.857465 -0.761948 
1 -0.263677 0.538251 
2 0.067710 -1.038906 
3 0.345584 -0.425514 
4 0.478200 0.119345 
5 0.639305 0.047526 
6 1.528260 1.956677 
7 3.114834 -0.532462 
相關問題