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

如何匹配两个DataFrame的Number字段并追加对应Id集合

如何匹配两个DataFrame的Number字段并追加对应Id集合

我来帮你搞定这个需求,思路其实很清晰:先把df1里每个Number对应的Id集合整理好,再去df2里逐个匹配每个Number列表对应的Id,最后把结果合并进去就行。

先回顾下我们的源数据:

import pandas as pd

df1 = pd.DataFrame({
    'Id': {0: 101, 1: 102, 2: 103, 3: 104},
    'Number': {0: 'A1', 1: 'A2', 2: 'B1', 3: 'B1'}})

df2 = pd.DataFrame({
    'Client': {0: 'John', 1: 'Mia', 2: 'Claudia'},
    'Number': {0: ['A1', 'B1'], 1: ['Z4'], 2: ['A2']}})

具体步骤:

  1. 构建Number到Id集合的映射字典
    先把df1按Number分组,把每个分组里的Id转成列表,再转成字典,这样我们就能快速通过Number值找到对应的所有Id:

    number_to_ids = df1.groupby('Number')['Id'].apply(list).to_dict()
    # 结果是:{'A1': [101], 'A2': [102], 'B1': [103, 104]}
    
  2. 定义匹配函数
    写一个小函数,输入df2里的Number列表,遍历每个元素去映射字典里找对应的Id,把所有结果合并成一个扁平列表;如果没有任何匹配的,就返回NaN:

    def get_matching_ids(num_list):
        ids = []
        for num in num_list:
            if num in number_to_ids:
                ids.extend(number_to_ids[num])
        return ids if ids else pd.NA
    
  3. 生成新的Ids列
    把这个函数用apply方法作用到df2的Number列上,生成新的Ids列:

    df2['Ids'] = df2['Number'].apply(get_matching_ids)
    

最终结果:

运行完上面的代码后,df2就会变成你想要的样子:

Client      Number          Ids
0     John  [A1, B1]  [101, 103, 104]
1      Mia     [Z4]             <NA>
2  Claudia     [A2]           [102]

这样就完美实现了需求,而且逻辑清晰,处理了没有匹配项的边界情况~

备注:内容来源于stack exchange,提问作者nzskra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:48:15