如何在Pandas中统计维修类型时排除空值并生成空字典?
解决方案
核心思路
先判断每个分组是否包含空字符串的repair_type:
- 若包含:该分组直接返回空字典
- 若不包含:统计分组内各维修类型的出现次数,返回统计字典
代码实现
1. 构造测试数据
import pandas as pd # 模拟用户的初始DataFrame(已将None转为空字符串) data = { 'id': [1, 1, 2, 2, 3], 'sub_id': [101, 102, 201, 202, 301], 'repair_type': ['更换零件', '', '维修电路', '更换零件', ''] } df = pd.DataFrame(data)
2. 定义分组处理函数
实现需求逻辑的自定义处理函数:
def process_repair_group(group): # 检查分组中是否存在空字符串的repair_type if (group['repair_type'] == '').any(): return {} # 统计非空维修类型的出现次数并转为字典 return group['repair_type'].value_counts().to_dict()
3. 执行分组统计
调用groupby结合自定义函数得到最终结果:
# 按id分组(可根据实际需求替换为sub_id或['id', 'sub_id']组合键) final_result = df.groupby('id').apply(process_repair_group).to_dict()
4. 验证结果
运行后final_result的输出为:
{ 1: {}, 2: {'更换零件': 1, '维修电路': 1}, 3: {} }
完全符合需求:含空字符串的分组返回空字典,无空字符串的分组返回有效统计结果。
扩展说明
- 如果需要按
id+sub_id组合维度分组,只需修改groupby的参数为['id', 'sub_id']即可 - 若后续需求变更为「保留分组但仅排除空字符串的计数」,可先过滤空值再统计,但当前场景下直接返回空字典的逻辑更贴合用户要求
内容的提问来源于stack exchange,提问作者stat_man
相关产品推荐
相关产品推荐

