如何用Pandas高效统计Symbol按CS类型的出现频次并重构DataFrame
高效生成Symbol-CS计数交叉表的最优方法
嘿,这个需求是典型的分类变量交叉计数场景,用pandas的内置工具就能简洁高效地解决,先把你的需求明确下来:
输入DataFrame示例
import pandas as pd df = pd.DataFrame({ 'Symbol': ['A1', 'A2', 'A3', 'A2', 'A2', 'A1', 'A2'], 'CS': ['MSI', 'MSI', 'GS', 'EBV', 'CIN', 'GS', 'MSI'] })
期望输出
MSI EBV CIN GS A1 1 0 0 1 A2 2 1 1 0 A3 0 0 0 1
最优高效实现方案
1. 推荐:使用pd.crosstab(简洁+性能最优)
pd.crosstab是pandas专门为这类交叉计数场景设计的函数,内部做了性能优化,能自动处理所有Symbol和CS的组合,缺失的组合直接填充0,一行代码就能搞定:
result = pd.crosstab(df['Symbol'], df['CS'])
这个方法在处理大数据量时优势尤其明显,它避免了手动分组转置的额外开销,内存占用也更合理。
2. 备选:groupby + unstack + 填充0
如果想手动实现计数逻辑,也可以用分组统计后转置的方式,不过需要手动指定缺失值填充0:
result = df.groupby(['Symbol', 'CS']).size().unstack(fill_value=0)
这个方法逻辑直观,但性能上略逊于pd.crosstab,因为unstack在处理大量分组时会产生更多中间计算步骤。
内容的提问来源于stack exchange,提问作者João Fernandes
相关产品推荐
相关产品推荐

