如何在pandas groupby中传入多变量?cohort变量定义遇KeyError
问题描述
以下代码均可正常运行:
cohort = r'priority' result2025 = df.groupby([cohort],as_index=False).agg({'resolvetime': ['count','mean']})
cohort = r'impactedservice' result2025 = df.groupby([cohort],as_index=False).agg({'resolvetime': ['count','mean']})
result2025 = df.groupby(['impactedservice','priority'],as_index=False).agg({'resolvetime': ['count','mean']})
但当我将cohort变量定义为以下形式时无法运行:
cohort = r'impactedservice,priority' # 双分组列 result2025 = df.groupby([cohort],as_index=False).agg({'resolvetime': ['count','mean']})
此时会报错:
KeyError: 'impactedservice,priority'
请问这种情况下该如何正确定义cohort变量?
解决方案
报错原因是你把两个列名拼成了单个字符串,pandas会将这个带逗号的字符串当作一个独立列名去DataFrame中查找,自然找不到对应列,因此抛出KeyError。
正确定义方式有两种:
方式一:直接定义为列名列表
把cohort定义为包含两个列名字符串的列表,groupby就能识别出按这两个列分组:
cohort = ['impactedservice', 'priority'] result2025 = df.groupby(cohort, as_index=False).agg({'resolvetime': ['count','mean']})
(注:groupby里无需额外加[],因为cohort本身就是列表,写成groupby([cohort], ...)也能运行,但没必要)
方式二:从逗号分隔的字符串拆分
如果列名来自逗号分隔的字符串,可通过split(',')方法拆分出列表:
cohort_str = r'impactedservice,priority' cohort = cohort_str.split(',') result2025 = df.groupby(cohort, as_index=False).agg({'resolvetime': ['count','mean']})
内容的提问来源于stack exchange,提问作者Mark G
相关产品推荐
相关产品推荐

