考虑到我有一个具有以下结构的数据框:
Symbol CS
0 A1 MSI
1 A2 MSI
2 A3 GS
3 A2 EBV
4 A2 CIN
5 A1 GS
6 A2 MSI
...
我希望有一个数据框将列CS分类为标题,将列符号列为索引。值将是CS类型出现的每个符号。例如,上述数据帧的预期输出为:
MSI EBV CIN GS
A1 1 0 0 1
A2 2 1 1 0
A3 0 0 0 1
解决这一特殊情况的最有效方法是什么?
答案 0 :(得分:5)
您可以使用crosstab
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
答案 1 :(得分:1)
一种方法是使用pd.value_counts
后跟pd.pivot_table
。
修改但实际上你应该使用@Wen's solution。
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