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

如何在Pandas中拼接DataFrame多列非空值并仅保留有效分隔符

解决DataFrame非空值列拼接问题

问题场景

现有如下DataFrame:

C1   C2  C3
1    4    6
2   NaN   9
3    5   NaN
NaN  7    3

需要将C1、C2、C3三列拼接为单个列,仅在非空值之间用逗号分隔,避免出现连续逗号或首尾空值的情况。

原尝试代码无法处理空值,得到的结果存在多余逗号:

df['New_Col'] = df[['C1','C2','C3']].agg(','.join, axis=1)

输出结果:

New_Col
1,4,6
2,,9
3,5,
,7,3

解决方案

方法1:逐行过滤非空值后拼接

使用apply遍历每一行,过滤掉NaN值后再用逗号连接:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'C1': [1, 2, 3, np.nan],
    'C2': [4, np.nan, 5, 7],
    'C3': [6, 9, np.nan, 3]
})

df['New_Col'] = df[['C1', 'C2', 'C3']].apply(
    lambda x: ','.join(str(val) for val in x if pd.notna(val)),
    axis=1
)

执行后得到理想输出:

New_Col
1,4,6
2,9
3,5
7,3

方法2:利用stack+groupby批量处理

如果列数较多,可通过stack堆叠非空值,再按行索引分组拼接:

df['New_Col'] = df[['C1','C2','C3']].stack().groupby(level=0).apply(','.join)

此方法会自动忽略NaN值,同样能得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:30:51