Pandas如何统计DataFrame多列中各不同值的出现次数
多列字符串值总出现次数统计实现
直接将全表数据堆叠为一维序列后做频次统计即可,自动跳过空值,代码如下:
import pandas as pd import numpy as np # 示例测试DataFrame df = pd.DataFrame({'type1':['A11','B11','A11','A'], 'type2':['A12','C','A12','D11'], 'type3':['C','D11','B','D12'], 'type4':[np.nan,'E12','C','E'] }) # 统计所有列的各值出现次数 res = df.stack().value_counts().reset_index() res.columns = ['value', 'count']
运行后得到的结果如下,和需求格式完全匹配:
value count 0 C 3 1 A11 2 2 A12 2 3 D11 2 4 B11 1 5 A 1 6 D12 1 7 B 1 8 E12 1 9 E 1
逻辑说明
df.stack()会将所有列按行堆叠为一维Series,默认自动剔除NaN空值,无需额外做空值过滤value_counts()直接对一维序列做频次统计,默认按出现次数降序排列- 最后重命名列即可得到要求的
value、count两列结构
注:你给出的预期结果中E12计数为3属于笔误,实际E12仅在type4列出现1次,C的出现次数为3次,和代码运行结果一致。
内容的提问来源于stack exchange,提问作者Legna
相关产品推荐
相关产品推荐

