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

Pandas DataFrame分组时如何保留带空格的原始行名称

问题描述

原始DataFrame:

name          count
-------------------
apple pie     1
applepie      3
blueberries   2
green tea     1

现有分组代码:

df["sans_spaces"] = df["name"].str.replace(" ", "")
grouped_df = df.groupby("sans_spaces", as_index=False).aggregate({"count": "sum"})

执行后得到的结果:

name          count
-------------------
applepie      4
blueberries   2
greentea      1

期望实现的最终结果:

name          count
-------------------
apple pie     4
blueberries   2
green tea     1

需要解决的核心问题:分组求和后,保留带空格的原始名称值,而非去空格后的字符串。


解决方法

方法1:聚合时同时保留原始名称的第一个出现值

修改聚合逻辑,在aggregate中同时指定name字段的处理规则,直接取每组内第一个出现的原始名称:

df["sans_spaces"] = df["name"].str.replace(" ", "")
grouped_df = df.groupby("sans_spaces", as_index=False).aggregate(
    {"count": "sum", "name": "first"}
)
# 移除辅助列(可选)
grouped_df = grouped_df.drop("sans_spaces", axis=1)

方法2:无需新增列,直接用去空格字符串作为分组键

可以跳过新增sans_spaces列的步骤,直接在groupby中使用去空格后的字符串作为分组依据:

grouped_df = df.groupby(df["name"].str.replace(" ", ""), as_index=False).aggregate(
    {"count": "sum", "name": "first"}
)

方法3:优先保留带空格的原始名称

如果每组内存在多种格式的名称(如同时有带空格和不带空格的),想强制优先保留带空格的名称,可以自定义聚合函数:

def pick_preferred_name(names):
    # 遍历组内名称,返回第一个带空格的,无则返回第一个元素
    for name in names:
        if " " in name:
            return name
    return names.iloc[0]

df["sans_spaces"] = df["name"].str.replace(" ", "")
grouped_df = df.groupby("sans_spaces", as_index=False).aggregate(
    {"count": "sum", "name": pick_preferred_name}
).drop("sans_spaces", axis=1)

以上方法均可实现分组求和后保留带空格的原始名称的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:05:07