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