Pandas groupby分组统计时未出现类别自动补0的实现方法
Pandas按分组统计频次并补全缺失值实现方法
首先修正你原有代码的语法错误,同时通过统一统计维度的方式补全缺失值,保证两个分组的输出列表长度一致,实现代码如下:
import pandas as pd titles=['MR.', 'MRS.', 'MR.', 'MR.', 'MRS.', 'MR.', 'MISS.', 'MR.', 'MRS.', 'MR.', 'MR.', 'MR.', 'MRS.', 'MR.', 'MRS.', 'MRS.', 'MR.', 'MR.', 'MISS.', 'MRS.', 'MR.', 'MASTER.', 'MRS.', 'MR.', 'MRS.', 'MR.', 'MISS.', 'MR.', 'MR.', 'MR.', 'MR.', 'MR.', 'MRS.', 'MRS.', 'MR.', 'MR.', 'MISS.', 'MISS.', 'MR.', 'MR.', 'MR.', 'MR.', 'MR.', 'MRS.', 'MRS.', 'MR.', 'MR.', 'MR.', 'MRS.', 'MRS.', 'MR.', 'MR.', 'MISS.', 'MISS.', 'MR.', 'MASTER.', 'MR.', 'MR.', 'MR.', 'MISS.', 'MR.', 'MR.', 'MR.', 'MISS.', 'MASTER.', 'MRS.', 'MISS.', 'MR.', 'MR.', 'MRS.', 'MR.', 'MISS.', 'MR.', 'MISS.', 'MR.', 'MR.', 'MRS.', 'MR.', 'MASTER.', 'DON.'] vals=[1,0,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,1,0,1, 0,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0] # 构建DataFrame df = pd.DataFrame({'titles': titles, 'vals': vals}) # 拿到所有title的唯一值作为统一统计维度,保证两个分组的统计项完全一致 all_titles = df['titles'].unique() # 分组统计后转宽表,缺失的title自动补0 count_df = df.groupby('vals')['titles'].value_counts().unstack(fill_value=0).reindex(columns=all_titles, fill_value=0) # 拆分得到两个独立列表 list_vals0 = count_df.loc[0].tolist() list_vals1 = count_df.loc[1].tolist() print("vals=0的统计列表:", list_vals0) print("vals=1的统计列表:", list_vals1)
运行输出
- vals=0的统计列表:
[19, 13, 9, 2, 1] - vals=1的统计列表:
[26, 5, 3, 2, 0]
输出完全匹配你原有扁平化的统计结果,且补全了vals=1分组中缺失的DON.对应统计值0,两个列表长度一致。
核心逻辑
- 先提取全量title唯一值作为统一统计维度,避免不同分组的统计维度不一致
- 通过
unstack将长格式的分组统计结果转为宽表,缺失的title取值自动补0 - 按vals的不同取值分别提取行数据转列表即可
内容的提问来源于stack exchange,提问作者john johns
相关产品推荐
相关产品推荐

