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

pandas中如何根据指定列值合并DataFrame对应行内容

按时间列合并文本列的实现方案

问题复现

现有如下结构的DataFrame:

time text
01.01.1970 abc
01.01.1970 cde
01.01.1970 fgh
01.01.1980 abc
01.01.1980 xyz

需求为按time列分组,将同组下text列的内容用\n作为分隔符合并,期望得到的输出结构如下:

time text
01.01.1970 abc\ncde\nfgh
01.01.1980 abc\nxyz

使用如下代码尝试实现时未得到预期结果,text列每行都返回text\ntime的内容:

out = (df.groupby('time', as_index=False)
       ['text'].agg(lambda x: '\n'.join(x.dropna())))

异常原因

该问题是部分pandas版本的兼容bug导致:groupby后使用单括号选取单列+as_index=False的组合写法时,聚合函数没有正确接收到text列的内容,反而把整个DataFrame的列名作为迭代对象传入,最终输出了拼接列名的错误结果。

修复方法

两种可直接运行的正确写法:

  • 写法1:将选列的单括号改为双括号,明确传入要聚合的单列DataFrame,避免列识别错误
out = (df.groupby('time', as_index=False)
       [['text']].agg(lambda x: '\n'.join(x.dropna())))
  • 写法2:用apply实现聚合后重置索引,兼容性更强,不受版本差异影响
out = df.groupby('time')['text'].apply(lambda x: '\n'.join(x.dropna())).reset_index()

以上两种写法运行后都可以得到预期的合并结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:18:20