如何对多变量分组创建符合结构要求的pandas DataFrame?
解决方案
最优方案:优化首次分组逻辑(无需额外拼接字段)
调整你第一次的分组写法的两个参数即可直接得到目标结构的DataFrame:
- 给
groupby传入as_index=False,避免将分组键转为行索引 - 调整聚合函数的写法,取消嵌套列表,避免生成多级列名
# 写法1:薪资总和列默认命名为salary team_salaries = salaries.groupby(['teamID', 'yearID'], as_index=False)['salary'].sum() # 写法2:自定义薪资总和的列名,更适配后续分析 team_salaries = salaries.groupby(['teamID', 'yearID'], as_index=False).agg( total_salary = ('salary', 'sum') )
输出结构为默认整数索引 + teamID、yearID、薪资总和三列,完全匹配需求。
备选方案:拆分已生成的teamyear字段
如果需要继续使用第二种拼接teamyear的方案,可按以下逻辑拆分字段:
# 将分组生成的索引转为普通列 teamyear = teamyear.reset_index() # 拆分规则:teamyear最后4位为年份,剩余字符为球队ID teamyear['yearID'] = teamyear['teamyear'].str[-4:].astype(int) teamyear['teamID'] = teamyear['teamyear'].str[:-4] # 筛选所需列得到目标DataFrame team_salaries = teamyear[['teamID', 'yearID', 'salary']]
注:你提供的第二种方案原始代码存在语法错误,
salaries teamyear = salaries.groupby(...)应修正为teamyear = salaries.groupby(...)
内容的提问来源于stack exchange,提问作者redleg_64
相关产品推荐
相关产品推荐

