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

Python中DataFrame按多列分组并拼接指定列字符串的问题

解决DataFrame分组合并非空字符串的问题

你遇到的问题是直接使用''.join作为聚合函数时,会把空字符串(或NaN)也纳入拼接,导致结果不符合预期。以下是两种可行的解决方法:

方法一:过滤空值后拼接

先将DataFrame中的NaN替换为空字符串(如果存在的话),然后在聚合时只拼接非空内容:

import pandas as pd

# 构造示例DataFrame
data = """A,B,C,D
91102,1,john,
91102,2,john,
91102,3,john,
91102,1,,mary
91102,2,,mary
91102,3,,mary
91103,1,sarah,
91103,2,sarah,
91103,3,sarah,
91103,1,,khan
91103,2,,khan
91103,3,,khan"""

df = pd.read_csv(pd.io.common.StringIO(data))
# 将NaN替换为空字符串
df = df.fillna('')

# 分组聚合,只拼接非空内容
df_result = df.groupby(['A', 'B'], as_index=False).agg(lambda x: ''.join(x[x != '']))

方法二:直接提取非空值

观察你的数据可知,每个A、B分组中,C和D列各自仅有一个非空值,因此可以直接提取该非空值:

df_result = df.groupby(['A', 'B'], as_index=False).agg(lambda x: x[x != ''].iloc[0])

两种方法都能得到你预期的结果:

A  B      C     D
0  91102  1   john  mary
1  91102  2   john  mary
2  91102  3   john  mary
3  91103  1  sarah  khan
4  91103  2  sarah  khan
5  91103  3  sarah  khan

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:20:30