将多个列值的出现数summarize为pandas datafram

2024-10-16 20:52:49 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑到我有一个具有以下结构的数据帧:

    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将是每种类型的值。例如,上述数据帧的预期输出为:

^{pr2}$

解决这一特殊案件的最佳有效方法是什么?在


Tags: 数据gsa2类型a1符号分类cs
2条回答

您可以使用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

一种方法是使用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

相关问题 更多 >