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

Pandas groupby分组时如何按条件筛选后拼接字符串字段

问题场景

现有如下测试数据集:

id   category   description   status
11   A          Text_1        Finished
11   A          Text_2        Pause
11   A          Text_3        Started
22   A          Text_1        Pause
33   B          Text_1        Finished
33   B          Text_2        Finished

需求:按id、category字段分组,仅拼接status = 'Finished'的行对应的description字段内容,无符合条件的分组对应description留空,期望输出如下:

id    category   description
11    A          Text_1
22    A          
33    B          Text_1 Text_2

当前已掌握无筛选条件的分组拼接实现:

data.groupby(['id', 'category'])['description'].apply(' '.join).reset_index()

需要在分组拼接逻辑中加入条件判断,实现带筛选的字符串拼接。

实现方法

方法1:分组内直接筛选拼接(推荐,代码最简洁)

直接在apply的自定义逻辑中先完成行筛选,再执行拼接,无需额外处理空分组,没有符合条件的分组会自动返回空字符串,完全匹配输出要求:

result = data.groupby(['id', 'category']).apply(
    lambda group: ' '.join(group.loc[group['status'] == 'Finished', 'description'])
).reset_index(name='description')

方法2:预过滤后重索引(适合大数据量场景,性能更好)

如果数据集规模较大,先全局过滤掉不符合条件的行再分组拼接,运算效率更高,最后通过重索引补全被过滤掉的空分组即可:

import pandas as pd

# 先过滤符合条件的行完成拼接
finished_part = data[data['status'] == 'Finished']\
    .groupby(['id', 'category'])['description']\
    .apply(' '.join)

# 取原始数据的全部分组组合作为基准索引,缺失值填空字符串
full_groups = pd.MultiIndex.from_frame(
    data[['id', 'category']].drop_duplicates()
)
result = finished_part.reindex(full_groups, fill_value='').reset_index(name='description')

两种方法执行后得到的结果和期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:21:21