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

如何在Pandas GroupBy聚合时排除NaN值进行拼接?

解决分组聚合时跳过NaN值的问题

我来帮你搞定这个需求!你现在需要在分组聚合拼接字符串的时候,自动跳过NaN值,而不是把它们转成nan字符串拼进去对吧?下面给你两种可行的实现方式:

方法一:自定义聚合函数(可读性更高)

先写一个专门处理非NaN值拼接的函数,逻辑清晰,后续维护也方便:

import pandas as pd
import numpy as np

# 自定义聚合函数:过滤NaN后拼接,无有效值则返回NaN
def join_without_nan(x):
    # 过滤掉当前组中的所有NaN值,同时转成字符串类型
    valid_values = x.dropna().astype(str)
    # 如果过滤后没有有效内容,返回NaN;否则用分号拼接
    return ';'.join(valid_values) if len(valid_values) > 0 else pd.NA

# 应用分组聚合
result = df.groupby(['t1'], as_index=False).agg(join_without_nan)

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

t1   c1            c2
0  20  NaN  xyz;x1y1z1

方法二:简洁的Lambda写法

如果想要更紧凑的代码,可以把逻辑直接写到lambda里:

result = df.groupby(['t1'], as_index=False).agg(
    lambda x: ';'.join(x.dropna().astype(str)) if not x.dropna().empty else pd.NA
)

原理说明

原来的代码之所以会把NaN转成nan字符串拼接,是因为直接用x.astype(str)把所有值(包括NaN)都转成了字符串。现在通过x.dropna()先过滤掉NaN值,只对有效内容进行拼接,完美解决了你的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:53:18