Pandas groupby后将列值计数展开为新列的简便实现咨询
更简洁的实现方案
核心思路是利用独热编码+分组求和直接得到各取值的统计结果,无需额外引入Counter、字典拆分和多轮DataFrame拼接操作。
核心代码
import pandas as pd # 原始测试数据 df = pd.DataFrame({'col1':['a','b','a','c','a','b'],'col2':['val1','val2','val2','val1','val2','val2'],'col3':['val3','val4','val3','val4','val3','val4']}) # 核心计算逻辑,可自动适配任意数量的非分组列 final = pd.get_dummies(df, columns=df.columns.drop('col1'), prefix='', prefix_sep='').groupby('col1').sum() # 若需要和你现有输出完全一致,可将统计结果中的0替换为NaN final = final.replace(0, pd.NA)
逻辑说明
pd.get_dummies会自动将除分组列col1之外的所有列,按取值转换为0/1格式的独立列,prefix=''和prefix_sep=''参数用来保证生成的列名直接是val1/val2这类取值名,不会带上原列名前缀- 按
col1分组后对所有列求和,直接得到每个分组下各取值的出现次数
该方案比你当前的实现代码量更少,运行效率更高,不需要手动指定要处理的非分组列,适配性更强。
内容的提问来源于stack exchange,提问作者darth baba
相关产品推荐
相关产品推荐

