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

Pandas DataFrame.groupby.sum()聚合时丢失列如何解决

问题原因

使用groupby().sum()时,pandas默认仅对数值类型列执行求和聚合,Assignment、Order reason属于文本类型,无法参与求和运算,因此会被自动排除,不会出现在最终聚合结果中。
另外注意样例中的Amount字段带千分位逗号,pandas读入后会默认识别为文本类型,直接求和会出现字符串拼接的错误,需要先做类型转换。

解决方法

核心是通过agg()方法为每一列显式指定聚合规则,不要直接调用sum(),同时设置as_index=False避免分组字段被设为行索引,保留普通数据表结构。

场景1:同组下非数值列取值唯一/取首个非空值

大部分业务场景下同一个Reference对应的Assignment、Order reason是固定值,直接取分组内第一个非空值即可:

import pandas as pd

wb = pd.read_excel("file.XLSX")
# 先处理Amount列的格式,转成可计算的数值类型
wb["Amount"] = wb["Amount"].str.replace(",", "").astype(float)

# 按Reference分组,为每列指定聚合规则
wb = wb.groupby("Reference", as_index=False).agg({
    "Amount": "sum",
    "Assignment": "first",
    "Order reason": "first"
})

场景2:同组下非数值列存在多个不同值,需保留全部信息

如果同一个Reference分组下对应多个Assignment或Order reason值,可以将同组去重后的值拼接为字符串保留:

wb = wb.groupby("Reference", as_index=False).agg({
    "Amount": "sum",
    "Assignment": lambda x: "、".join(x.dropna().unique()),
    "Order reason": lambda x: "、".join(x.dropna().unique())
})

上述代码会自动跳过空值,把同组下的唯一值用顿号拼接,不会丢失信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:15:52