如何在Python中使用字典作为DataFrame分组聚合的参数?
在Python中用字典值作为DataFrame groupby和agg的参数
你原代码的问题在于:groupby()需要的是列名的序列(列表、元组等),直接传入字典a会导致分组逻辑错误;而agg()需要的是{列名: [聚合函数]}的结构,把字典b作为键显然不符合要求。
正确实现方式
提取字典的values()作为参数即可,以下是完整示例:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'experience_level': ['EN', 'MI', 'SE', 'EN', 'MI'], 'job_title': ['Data Analyst', 'Data Scientist', 'Data Engineer', 'Data Analyst', 'Data Scientist'], 'salary': [50000, 80000, 100000, 55000, 85000] }) # 定义存储列名的字典 a = {"1": "experience_level", "2": "job_title"} b = {"1": "salary"} # 提取字典值作为groupby和agg的参数 grouped_multiple = df.groupby(list(a.values())).agg({list(b.values())[0]: ['mean', 'min', 'max']}) print(grouped_multiple)
多列通用写法
如果字典b包含多个列名,可以用字典推导式生成通用的聚合配置:
# 示例:b包含多个列 b = {"1": "salary", "2": "bonus"} # 自动生成聚合字典 agg_dict = {col: ['mean', 'min', 'max'] for col in b.values()} grouped_multiple = df.groupby(list(a.values())).agg(agg_dict)
关键说明
list(a.values())将字典a的值转换为分组列名列表,等价于硬编码的['experience_level', 'job_title']- 对于
agg(),需要将字典b的值作为键,对应聚合函数列表,确保符合{列名: 聚合函数/列表}的参数格式
内容的提问来源于stack exchange,提问作者Jonathan Chen
相关产品推荐
相关产品推荐

