Python 将多列值的出现次数汇总为一个数据帧
考虑到我有一个具有以下结构的数据帧:Python 将多列值的出现次数汇总为一个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,考虑到我有一个具有以下结构的数据帧: Symbol CS 0 A1 MSI 1 A2 MSI 2 A3 GS 3 A2 EBV 4 A2 CIN 5 A1 GS 6 A2 MSI ... 我希望有一个dataframe,它将列CS分类为标题,将列符号分类为索引。这些值将是CS类型中每个符号的出现次数。例如,上述数据帧的预期输出为: MSI EBV CIN G
Symbol CS
0 A1 MSI
1 A2 MSI
2 A3 GS
3 A2 EBV
4 A2 CIN
5 A1 GS
6 A2 MSI
...
我希望有一个dataframe,它将列CS分类为标题,将列符号分类为索引。这些值将是CS类型中每个符号的出现次数。例如,上述数据帧的预期输出为:
MSI EBV CIN GS
A1 1 0 0 1
A2 2 1 1 0
A3 0 0 0 1
解决这种特殊情况的最佳有效方法是什么?一种方法是使用pd.value\u计数,然后使用pd.pivot\u表
编辑:但你真的应该使用
一种方法是使用pd.value\u计数,然后使用pd.pivot\u表
编辑:但你真的应该使用
您可以使用交叉表
您可以使用交叉表
非常感谢。这真的是高效快捷!文是巨蟒大师,谢谢!这真的是高效快捷!温是一位Python大师。在这种特殊情况下,交叉表工作得很好!不过还是要谢谢你@若昂·奥弗南德斯,请接受温家宝的回答——左边绿色的勾号——他的答案好多了!在这种特殊情况下,交叉表工作得很好!不过还是要谢谢你@若昂·奥弗南德斯,请接受温家宝的回答——左边绿色的勾号——他的答案好多了!
counts = df.groupby('Symbol')['CS'].apply(pd.value_counts).reset_index()
res = counts.pivot_table(index='Symbol', columns='level_1', values='CS',
fill_value=0, aggfunc=lambda x: x)
print(res)
# level_1 CIN EBV GS MSI
# Symbol
# A1 0 0 1 1
# A2 1 1 0 2
# A3 0 0 1 0
pd.crosstab(df.Symbol,df.CS)
Out[862]:
CS CIN EBV GS MSI
Symbol
A1 0 0 1 1
A2 1 1 0 2
A3 0 0 1 0