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

基于动态列表条件在Pandas中创建新列的实现方案

Pandas DataFrame Delta与Taxa差异检查赋值方案

给定数据

分组列表

delta = ['1','5']
taxa = ['2','3','4']

目标DataFrame

import pandas as pd

data = { 'id': [101,102,103,104,105],
       '1_srcA': ['a', 'b','c', 'd', 'g'] ,
       '1_srcB': ['a', 'b','c', 'd', 'e'] ,
       '2_srcA': ['g', 'b','f', 'd', 'e'] ,
       '2_srcB': ['a', 'b','c', 'd', 'e'] ,
       '3_srcA': ['a', 'b','c', 'd', 'e'] ,
       '3_srcB': ['a', 'b','1', 'd', 'm'] ,
       '4_srcA': ['a', 'b','c', 'd', 'e'] ,
       '4_srcB': ['a', 'b','c', 'd', 'e'] ,
       '5_srcA': ['a', 'b','c', 'd', 'e'] ,
       '5_srcB': ['m', 'b','c', 'd', 'e'] }
df = pd.DataFrame(data)

检查规则

  • 若delta列表中任意一组列对(如1_srcA与1_srcB)存在差异,新列赋值2;
  • 若仅taxa列表中任意一组列对存在差异,新列赋值1;
  • 若delta和taxa列对同时存在差异,仍赋值2;
  • 所有列对均无差异时,赋值0。

最优实现代码

# 生成delta组的差异掩码:只要有一组delta列对不同,标记为True
delta_diff = pd.Series(False, index=df.index)
for num in delta:
    delta_diff |= df[f"{num}_srcA"] != df[f"{num}_srcB"]

# 生成taxa组的差异掩码:只要有一组taxa列对不同,标记为True
taxa_diff = pd.Series(False, index=df.index)
for num in taxa:
    taxa_diff |= df[f"{num}_srcA"] != df[f"{num}_srcB"]

# 按规则赋值新列
df['check_result'] = 0
# 仅taxa有差异的行赋值1
df.loc[taxa_diff & ~delta_diff, 'check_result'] = 1
# delta有差异的行(含同时满足taxa差异的情况)赋值2
df.loc[delta_diff, 'check_result'] = 2

代码说明

  1. 差异掩码生成:通过遍历分组列表,用逻辑或(|=)累积每行的差异状态,只要该组内有任意一对列不同,该行就标记为差异行;
  2. 优先级赋值:先初始化新列为0,再处理低优先级的“仅taxa差异”情况,最后处理高优先级的“delta差异”情况,确保规则3的优先级生效。

内容的提问来源于stack exchange,提问作者usr_lal123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:55:18