pandas如何忽略0值拼接混合数据类型的多列生成新列
实现代码
你只需在原有拼接逻辑前增加0值过滤规则即可,同时可根据需求兼容数值/字符串格式的0,以及类型判断:
方案1:基于原有代码小幅修改
保留你原本的dropna逻辑,新增过滤规则:
cols=['col1','col2', 'col3', 'col4', 'col5'] # 仅拼接非空、非0的字符串类型元素 df2["col6"] = df2[cols].apply( lambda x: ';'.join([val for val in x.dropna() if isinstance(val, str) and val != '0']), axis=1 ) # 如果不需要排除数值类型,仅需要过滤0,可简化为: # df2["col6"] = df2[cols].apply(lambda x: ';'.join([val for val in x.dropna() if val not in (0, '0')]), axis=1)
方案2:大体积DataFrame优化方案
当数据量较大时,使用向量化操作代替逐行apply,性能提升明显:
cols=['col1','col2', 'col3', 'col4', 'col5'] # 先将所有0值替换为空 tmp = df2[cols].replace([0, '0'], '') # 按行拼接后清理多余分号 df2['col6'] = tmp.agg(';'.join, axis=1).str.replace(r';+', ';', regex=True).str.strip(';')
内容的提问来源于stack exchange,提问作者soosa
相关产品推荐
相关产品推荐

