2016-05-11 34 views
1

我有一個2d熊貓數據框與幾列。我想創建一個2d矩陣,每個組的項目數爲CHr兩列。從數據框條目創建2d矩陣

施加函數 df.groupby(['C', 'Hr']).count()

後我獲得以下數據幀:

C Hr A B C D      
US 22 2 2 2 2 
    1 3 3 3 3 
JP 14 2 2 2 2 
    19 4 4 4 4 
    20 2 2 2 2 

我如何能夠獲得關於每個軸,而不是與C和Hr的2D矩陣/數據幀?沒有必要保留任何其他列名稱,只是所有列的計數相同。

輸出示例:

Hr US JP ... 
1 2 3 ... 
2 3 1 ... 
3 3 4 ... 

或者與軸翻轉作品以及

+0

你可以添加你的數據樣本和所需的輸出?樣本中有兩列'C'? – jezrael

+0

@jezrael希望你明白我的意思,提供的解決方案不會產生輸出 – user113531

回答

1

您可以使用pivot_table與聚集len,如果你需要填寫NaN0使用參數fill_value=0

print df.pivot_table(index='Hr', columns='C', values='A', aggfunc=len, fill_value=0) 

樣品:

import pandas as pd 

df = pd.DataFrame({'Hr': [1] * 10 + [2] * 6 + [3] * 4, 
        'A': np.arange(20), 
        'C': ['US'] * 10 + ['JP'] * 10 }) 

print df 
    A C Hr 
0 0 US 1 
1 1 US 1 
2 2 US 1 
3 3 US 1 
4 4 US 1 
5 5 US 1 
6 6 US 1 
7 7 US 1 
8 8 US 1 
9 9 US 1 
10 10 JP 2 
11 11 JP 2 
12 12 JP 2 
13 13 JP 2 
14 14 JP 2 
15 15 JP 2 
16 16 JP 3 
17 17 JP 3 
18 18 JP 3 
19 19 JP 3 

print df.pivot_table(index='Hr', columns='C', values='A', aggfunc=len, fill_value=0) 
C JP US 
Hr   
1 0 10 
2 6 0 
3 4 0 

如果您需要reset_index和刪除列的名稱,使用rename_axis(新中pandas0.18.0):

print df.pivot_table(index='Hr', columns='C', values='A', aggfunc=len, fill_value=0) 
     .reset_index() 
     .rename_axis(None, axis=1) 

    Hr JP US 
0 1 0 10 
1 2 6 0 
2 3 4 0 
+0

這些條目是正確的,但是如何將國家/地區列翻到水平軸上,如示例輸出 – user113531

+0

對不起,我希望現在的解決方案是正確。 – jezrael

+0

謝謝你,現在工作 – user113531