You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:57:04