如何在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
相关产品推荐
相关产品推荐

