2016-07-14 21 views
1

我從另一個獲取數據幀時遇到了一些問題。熊貓:按列和計數重複進行

彙總,我有這樣的數據幀:

Word | ... | ... | Code 
w1 | ... | ... | 1234 
w1 | ... | ... | 2345 
... 
w1 | ... | ... | 5678 
w2 | ... | ... | 5678 
w2 | ... | ... | 1234 
... 
wXX | ... | ... | YYYY 

我想獲得這一個看起來新的數據幀,如:

Code | w1 | w2 | w3 ... 
1234 | #w1 | #w2 | #w3 ... 
2345 | #w1 | #w2 | #w3 ... 

也就是說,一個新的DF其索引的代碼並且每列都標有其列。在每一行中,我要計算一個單詞有多少次確定的代碼。有什麼辦法可以做到嗎?我一直在嘗試使用groupby,但我被卡住了。

任何幫助,將不勝感激:-)

回答

0

您需要pivot_tableaggfunc=len

print (df) 
    Word Code 
0 w1 1234 
1 w1 2345 
2 w1 5678 
3 w2 5678 
4 w2 1234 

df = df.pivot_table(index='Code', columns='Word', aggfunc=len) 
print (df) 
Word w1 w2 
Code   
1234 1.0 1.0 
2345 1.0 NaN 
5678 1.0 1.0 

如果需要reset_indexrename_axis(新中pandas0.18.0)刪除列名:

df = df.pivot_table(index='Code', columns='Word', aggfunc=len) 
     .reset_index() 
     .rename_axis(None, axis=1) 
print (df) 
    Code w1 w2 
0 1234 1.0 1.0 
1 2345 1.0 NaN 
2 5678 1.0 1.0 

如果需要將NaN更換爲0,加參數fill_value=0

df = df.pivot_table(index='Code', columns='Word', aggfunc=len, fill_value=0) 
     .reset_index() 
     .rename_axis(None, axis=1) 

print (df) 
    Code w1 w2 
0 1234 1 1 
1 2345 1 0 
2 5678 1 1