Pandas合并两个字符串列 去重并仅当全为others时保留该值
实现方法
你只需要在拼接去重的逻辑中增加others过滤规则即可,以下是两种可选实现方案:
方案1:基于原有代码改造
直接在你现有逻辑的基础上,对拆分后的结果过滤掉others,如果过滤后为空则返回others:
import pandas as pd data = {'fruit1':["organge", "apple", "organge", "organge", "others"], 'fruit2':["apple", "others", "organge", "watermelon", "others"]} df = pd.DataFrame(data) df["together"] = df["fruit1"] + ' ' + df["fruit2"] df["together"] = df["together"].apply(lambda x: ' '.join([v for v in pd.unique(x.split()) if v != 'others']) or 'others')
方案2:按行处理(性能更优,可保留值的原有顺序)
直接逐行读取两个列的值处理,不需要先拼接再拆分,同时可以保证fruit1的值在前、fruit2的值在后的顺序:
def merge_fruit(row): valid = [] seen = set() for val in [row['fruit1'], row['fruit2']]: if val != 'others' and val not in seen: valid.append(val) seen.add(val) return ' '.join(valid) if valid else 'others' df['together'] = df.apply(merge_fruit, axis=1)
两种方案运行后都可以得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

