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

如何在DataFrame中按多列分组并正确聚合多字段?

解决Pandas分组聚合时因错误包含聚合字段导致的重复行问题

看起来你已经走对了第一步——用前向填充补全了State和County的NaN值,但问题出在错误地将需要聚合的字段(Man、Woman、Not_Register)加入了分组键里。

让我拆解一下问题:
当你把Man、Woman这些字段放进groupby的参数时,Pandas会认为只要这些字段的值有差异,就算是不同的分组。比如你Gto州Celaya县的原始数据里,有几行的Man/Woman值不同,它们就会被分成多个组,最终结果自然会出现重复的County行。

正确的解决方法

我们只需要把**分组维度(State、County)**放进groupby,然后对需要汇总的字段(Homicides、Man、Woman、Not_Register)指定聚合函数即可。

完整代码如下:

import pandas as pd
import numpy as np

# 构造示例数据(方便验证)
data = {
    'State': ['Gto', np.nan, np.nan, np.nan, np.nan, 'Sin', np.nan, 'Chih'],
    'County': ['Celaya', np.nan, np.nan, 'Yiriria', 'Acambaro', 'Culiacan', np.nan, 'Juarez'],
    'Homicides': [2,8,3,2,1,3,5,1],
    'Man': [2,4,2,1,1,1,4,1],
    'Woman': [0,2,1,1,0,1,0,0],
    'Not_Register': [0,2,0,0,0,1,1,0]
}
df = pd.DataFrame(data)

# 前向填充补全NaN(新版本Pandas推荐用ffill替代pad)
df = df.fillna(method='ffill')

# 只按State和County分组,对需要求和的字段统一聚合
df_agg = df.groupby(['State', 'County'], as_index=False).agg({
    'Homicides': 'sum',
    'Man': 'sum',
    'Woman': 'sum',
    'Not_Register': 'sum'
})

print(df_agg)

输出结果验证

运行后你会得到和预期完全一致的结果:

StateCountyHomicidesManWomanNot_Register
ChihJuarez1100
GtoAcambaro1100
GtoCelaya13832
GtoYiriria2110
SinCuliacan8512

额外提示

  • 如果你所有需要聚合的字段都是求和,也可以简化写成df.groupby(['State', 'County'], as_index=False).sum(),效果是一样的。
  • Pandas 2.0+版本里method='pad'已经被标记为过时,建议改用df.fillna(method='ffill')或者df.ffill(),避免警告信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:42:55