如何合并DataFrame不同列的唯一值并添加指定分隔符?

问题说明
需要合并数据集中Symptom_1、Symptom_2、Symptom_3三列的内容,同时提取所有症状的唯一值。初始使用+直接拼接三列的写法没有添加分隔符,导致不同症状值粘连,无法区分。
正确实现方法
1. 带逗号分隔符合并列,生成新的Symptom字段
不要直接用+硬拼字符串,用join方法可以统一处理分隔符,同时自动过滤空值,避免出现多余逗号或者空值报错:
# 选中需要合并的三列,逐行拼接非空值,用逗号做分隔符 df['Symptom'] = df[['Symptom_1', 'Symptom_2', 'Symptom_3']].apply( lambda row: ','.join(row.dropna().astype(str)), axis=1 ) df.head()
如果确定三列没有空值,也可以直接用pandas内置的字符串拼接方法,运行效率比apply更高:
df['Symptom'] = df['Symptom_1'].str.cat([df['Symptom_2'], df['Symptom_3']], sep=',')
2. 提取所有症状的唯一值
如果最终目的是拿到全表所有不重复的症状,不需要先拼接成列,可以直接把三列数据拉平后去重,运行速度更快:
# 将三列数据转为一维序列,去重后得到所有唯一症状 unique_symptom_list = df[['Symptom_1', 'Symptom_2', 'Symptom_3']].stack().dropna().unique().tolist()
原代码问题说明
直接用row.Symptom_1 + row.Symptom_2 + row.Symptom_3做拼接时,本质是对三个字符串做首尾相连操作,不会自动插入任何分隔符。如果硬要用+实现带分隔符的拼接,需要手动在列之间加逗号:row.Symptom_1 + ',' + row.Symptom_2 + ',' + row.Symptom_3,但这种写法遇到列值为空时会报错,也会出现开头/结尾/中间多余逗号的问题,不推荐使用。
内容的提问来源于stack exchange,提问作者Rahul Rana
相关产品推荐
相关产品推荐

