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

如何在Python中生成每行非NaN值对应列名的逗号分隔字符串?

基于DataFrame非NaN值生成对应列名的逗号分隔字符串

你的数据集如下:

import numpy as np
import pandas as pd

data = {
    'A': [1, np.nan, np.nan],
    'B': [2, np.nan, np.nan],
    'C': [np.nan, np.nan, 6]
}

df = pd.DataFrame(data)

需要新增一列string,每一行的值是该行中非NaN值对应的列名组成的逗号分隔字符串,最终期望得到的结果为:

outcome = {
    'A': [1, np.nan, np.nan],
    'B': [2, np.nan, np.nan],
    'C': [np.nan, np.nan, 6],
    'string': ['A,B', '', 'C']
}

你找到的参考代码是针对值不为0的场景,只需做两处核心修改就能适配你的需求:

  • 把判断条件从x[c] != 0改为pd.notna(x[c]),用于识别非NaN值
  • 把拼接分隔符从'-'改为',',符合你的逗号分隔要求
  • 原代码的.replace('', 0)是把空字符串替换为0,你的需求是空字符串保留原样,所以可以去掉这部分

完整实现代码如下:

import numpy as np
import pandas as pd

data = {
    'A': [1, np.nan, np.nan],
    'B': [2, np.nan, np.nan],
    'C': [np.nan, np.nan, 6]
}

df = pd.DataFrame(data)

# 生成目标列
df['string'] = df.apply(lambda x: ','.join(c for c in df.columns if pd.notna(x[c])), axis=1)

# 输出结果与期望一致
print(df.to_dict('list'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:13:19