使用pandas比较DataFrame列值 匹配时生成新列否则从列表取值赋值
Pandas 两项数据处理操作实现方案
1. 单列取值与另一列存储的列表元素比对
实现逻辑:按行遍历DataFrame,判断单值列的取值是否存在于同行的列表存储列的元素中,最终返回布尔类型的新列标识匹配结果。
核心实现代码:
# is_in_list列取值为True表示匹配成功,False表示匹配失败 df['is_in_list'] = df.apply(lambda x: x['单值列名'] in x['列表存储列名'], axis=1)
2. 两列字符串匹配生成新列,不匹配则从指定列表随机取值
实现逻辑:按行比较两个指定列的字符串,匹配则将匹配值写入新列,不匹配则从预先给定的可选值列表中随机抽取一个值写入新列。
核心实现代码:
import random # 预先定义可选值列表 optional_list = ['备选值1', '备选值2', '备选值3'] # 完全匹配判断逻辑,若需要子串包含匹配可将判断条件改为 x['列1'] in x['列2'] df['新列名'] = df.apply(lambda x: x['列1'] if x['列1'] == x['列2'] else random.choice(optional_list), axis=1)
完整可运行示例
import pandas as pd import random # 构造测试数据 df = pd.DataFrame({ '单值列': [2, 5, 7, 9], '列表列': [[1,2,3], [4,5,6], [8,9,10], [6,7,8]], '待比较列1': ['苹果', '香蕉', '橙子', '葡萄'], '待比较列2': ['苹果', '西瓜', '橙子', '芒果'] }) # 执行操作1 df['是否在列表中'] = df.apply(lambda x: x['单值列'] in x['列表列'], axis=1) # 执行操作2 opt_list = ['荔枝', '火龙果', '猕猴桃'] df['结果列'] = df.apply(lambda x: x['待比较列1'] if x['待比较列1'] == x['待比较列2'] else random.choice(opt_list), axis=1) print(df)
注意事项
- 上述代码中的
axis=1参数表示按行遍历处理,不可遗漏,否则会按列判断得到错误结果 - 若处理的数据量超过百万行,建议替换
apply为向量化操作提升运行效率
内容的提问来源于stack exchange,提问作者seek
相关产品推荐
相关产品推荐

