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

Python实现DataFrame同类别行合并及聚合需求求助

解决Pandas分组拼接非空值的问题

嘿,刚接触Python和Pandas的话,这种分组处理的需求确实容易卡壳,不过别担心,咱们一步步来搞定它!

首先先确认下你的原始数据:

import pandas as pd
data = pd.DataFrame({'a': [1,1,2,2,2,3], 'b': [12,22,23,34,44,55], 'c':['a','','','','c',''], 'd':['','b','b','a','a','']})

要实现按列a分组,忽略b,把同组内c、d的非空值拼接起来,这里给你两种简洁高效的实现思路:

方法一:自定义拼接函数(可读性强)

先写一个小函数,专门用来把一列里的非空值拼接成字符串:

def concat_non_empty(series):
    # 过滤空字符串,再把剩下的非空值连起来
    return ''.join([val for val in series if val != ''])

然后通过groupby分组后,对c和d列应用这个函数:

result = data.groupby('a')[['c', 'd']].agg(concat_non_empty).reset_index()

运行后就能得到你想要的结果:

a  c    d
0  1  a    b
1  2  c  baa
2  3     ''

方法二:匿名函数写法(更紧凑)

不用单独定义函数,直接在agg里用匿名函数实现,代码更简洁:

result = data.groupby('a')[['c', 'd']].agg(lambda x: ''.join(x[x != ''])).reset_index()

这个写法和方法一效果完全一致,适合快速实现需求。

关键逻辑拆解

  • groupby('a'):按a列的取值把数据分成独立分组
  • [['c', 'd']]:只指定处理c、d两列,自动忽略了不需要的b列,完美匹配你的要求
  • agg(...):对每个分组的目标列执行拼接操作——先通过布尔索引过滤掉空字符串,再用''.join()把非空值按顺序拼接
  • reset_index():把分组用的a列从索引变回普通列,让结果结构和你给出的示例完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:15