如何按行统计Pandas DataFrame中各分值的出现频率?
按行统计用户得分频率的解决方案
直接用Pandas的apply结合value_counts就能实现需求,代码简洁高效,适配你100列的场景:
import pandas as pd # 你的原始数据 df1 = pd.DataFrame({'User': ['user_a', 'user_b', 'user_c'], 'Cat1_score': [0, 5, 3], 'Cat2_score': [0, 2, 5], 'Cat3_score': [4, 5, 1]}) # 1. 分离用户列和得分列 score_cols = df1.drop('User', axis=1) # 2. 对每行统计0-5的出现次数,缺失分值补0 counts = score_cols.apply( lambda row: row.value_counts().reindex(range(6), fill_value=0), axis=1 ) # 3. 把数字列名改成对应的英文名称 counts.columns = ['zero', 'one', 'two', 'three', 'four', 'five'] # 4. 把用户列插回结果的第一列 result = counts.copy() result.insert(0, 'User', df1['User']) print(result)
运行后输出的结果完全匹配你想要的df2格式,可直接和其他用户表关联,也能通过result.to_excel('得分统计.xlsx')导出到Excel。
关键步骤说明:
- 用
drop分离得分列,避免用户名字段干扰统计逻辑 apply(axis=1)指定按行处理,value_counts()自动统计每行的分值出现频率reindex(range(6), fill_value=0)确保0到5每个分值都有统计项,未出现的分值填0,保证结果列的完整性- 最后插回用户列,让结果格式满足关联、导出的需求
内容的提问来源于stack exchange,提问作者Lesley
相关产品推荐
相关产品推荐

