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

Pandas如何基于多条件匹配不同DataFrame生成目标新列

Pandas按多规则匹配生成新列实现方案

实现思路

  1. 先将两个映射表去重后转为字典结构,避免重复值导致匹配异常,同时提升匹配效率
  2. 采用向量化条件判断实现多分支匹配,按优先级执行规则:
    • Value1为空(含空字符串、NaN)时新列直接赋值为-
    • Value1为Tactical时,用Value2匹配df3的映射关系
    • 其余场景默认用Value1匹配df2的映射关系

完整代码

1. 导入依赖&构建测试数据

import pandas as pd
import numpy as np

# 构建主表Sample_df
Sample_df = pd.DataFrame({
    'No.': [1,2,3,4,5],
    'Value1': ['AS', 'AS', 'Product', '', 'Tactical'],
    'Value2': ['DS', 'BS', '-', 'AS', 'VS']
})

# 构建映射表df2
df2 = pd.DataFrame({
    'Value1': ['AS', 'AS', 'Product'],
    'Num': ['Des', 'Des', 'P']
})

# 构建映射表df3
df3 = pd.DataFrame({
    'Value2': ['DS', 'AS', 'BS', 'VS'],
    'Num': ['Des', 'Bed', 'Ged', 'Vis']
})

2. 生成映射字典&计算新列

# 生成去重后的映射字典
map_v1 = df2.drop_duplicates('Value1').set_index('Value1')['Num'].to_dict()
map_v2 = df3.drop_duplicates('Value2').set_index('Value2')['Num'].to_dict()

# 按规则生成新列
Sample_df['NewCol'] = np.where(
    Sample_df['Value1'].fillna('') == '',
    '-',
    np.where(
        Sample_df['Value1'] == 'Tactical',
        Sample_df['Value2'].map(map_v2),
        Sample_df['Value1'].map(map_v1)
    )
)

输出结果验证

执行后打印Sample_df即可得到预期结果:

No.    Value1 Value2 NewCol
0    1        AS     DS    Des
1    2        AS     BS    Des
2    3   Product      -      P
3    4               AS      -
4    5  Tactical     VS    Vis

补充说明

如果后续规则更复杂,也可以用自定义函数+apply实现,但大数据量场景下优先使用上述向量化方案,性能远高于行遍历的apply方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:36:04