熊猫:按列和计数重复分组

时间:2016-07-14 08:07:07

标签: python pandas group-by

我在从另一个获取数据框时遇到一些问题。

总结一下,我有这个数据框:

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但是我被卡住了。

任何帮助将不胜感激: - )

1 个答案:

答案 0 :(得分:1)

aggfunc=len需要pivot_table

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_index并按rename_axis删除列名称(pandas 0.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