我在从另一个获取数据框时遇到一些问题。
总结一下,我有这个数据框:
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 :(得分: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