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

Python pandas如何匹配ID实现两个DataFrame列表值逐元素相除

Pandas按ID匹配后对列表列逐元素相除实现方案

测试数据构造

第一个DataFrame df 构造代码:

import pandas as pd

d = {'Name' : pd.Series(['A', 'A', 'A','B', 'B', 'B', 'C', 'D', 'D']), 
 'ID' : pd.Series(['10', '11', '12','13', 
                     '10', '12','14','10','12']),
 'Value' : pd.Series([[100,200,300,200,400,600,20,50,100],[100,150,200,100,200,300,200,50,100],[100,200,300,200,400,400,20,40,50],[10,250,200,100,200,400,210,150,100],
            [100,100,100,200,200,300,200,60,50],[100,200,200,200,100,200,200,410,50],[50,100,240,200,200,450,200,410,50] ,[100,100,200,100,200,100,120,140,150] ,[100,100,200,100,200,100,100,140,150]       ]),
'YES' : pd.Series(['Y','N','Y','N','Y','Y','N','N','N'])}
df = pd.DataFrame(d) 

第二个DataFrame df1 构造代码:

d = {'ID' : pd.Series(['10', '11', '12','13', '14']), 
 'Value' : pd.Series([[10,20,30,20,40,60,2,5,10],[10,15,20,10,20,30,20,5,10],[10,20,30,20,40,40,2,4,5],[10,25,20,10,20,40,21,15,10],[15,10,20,10,10,10,12,14,15]     ]),
'YES' : pd.Series(['Y','N','Y','N','Y'])}
df1 = pd.DataFrame(d) 

需求说明

  • 对df每一行的Value列表,匹配df1中相同ID对应的Value列表
  • 两个列表按索引位置逐元素相除,结果存入新列Result
  • 部分预期输出:
Name ID     Value                                      YES        Result 
A   10  [100, 200, 300, 200, 400, 600, 20, 50, 100]     Y   [10,10,10,10,10,10,10,10,10]
B   13  [10, 250, 200, 100, 200, 400, 210, 150, 100]    N   [1,10,10,10,10,10,10,15,10]

实现代码

核心思路是先把df1转成ID到Value列表的映射字典,避免逐行查询DataFrame提升运行效率,再逐行做列表推导计算逐元素除法即可。

# 构建ID与参考Value列表的映射
id_ref_map = df1.set_index('ID')['Value'].to_dict()

# 计算逐元素相除结果,需要整数结果直接转int即可
df['Result'] = df.apply(
    lambda row: [int(a/b) for a, b in zip(row['Value'], id_ref_map[row['ID']])],
    axis=1
)

# 打印结果验证
print(df[['Name', 'ID', 'Value', 'YES', 'Result']])

运行后输出结果和预期完全匹配,所有ID对应的行都会自动匹配到df1中相同ID的Value列表完成计算。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:57:20