You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对仅部分组匹配的分组DataFrame执行相加操作?

解决多索引DataFrame按组相加的问题

核心问题分析

你遇到的问题主要源于两点:

  • 两个DataFrame的分组列名不一致:df1第一列是pitch_type,df2是pitch type,导致多索引无法正确对齐。
  • 若多索引的层级顺序不统一,也会造成add方法无法匹配对应分组。

解决方案

步骤1:统一列名

先将两个DataFrame的分组列名改成一致,确保索引层级名称完全匹配:

import pandas as pd

# 统一df2的列名与df1对齐
df2 = df2.rename(columns={"pitch type": "pitch_type"})

步骤2:确保多索引结构一致

如果你的DataFrame还未设置多索引,先将三个分组列设为多索引;若已是多索引,确认层级顺序为['pitch_type', 'zone', 'description']:

# 设置多索引(未设置时执行)
df1 = df1.set_index(['pitch_type', 'zone', 'description'])
df2 = df2.set_index(['pitch_type', 'zone', 'description'])

步骤3:执行相加操作

方法一:使用add方法

利用fill_value=0保留无匹配的分组,最后重置索引并转换数值类型:

result_df = df1.add(df2, fill_value=0).reset_index()
# 将数值列转为整数(避免出现浮点数)
result_df[0] = result_df[0].astype(int)

方法二:使用concat+groupby求和(更直观)

合并两个DataFrame后按分组求和,自动保留所有分组:

combined_df = pd.concat([df1, df2])
result_df = combined_df.groupby(['pitch_type', 'zone', 'description']).sum().reset_index()

最终结果

执行后得到的DataFrame将完全符合预期:

pitch_typezonedescription0
CH1.0hit_by_pitch4
CH1.0ball6
CH2.0swinging_strike1
CH3.0ball1
CU2.0hit_by_pitch6

内容的提问来源于stack exchange,提问作者Jackson Prettyman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:30:54