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

如何基于ID列将数据集的BMI值匹配添加到含重复ID的另一数据集

如何基于ID列将数据集的BMI值匹配添加到含重复ID的另一数据集

嘿,我来帮你搞定这个需求~你想要把一个数据集里的BMI值,按ID匹配到另一个存在重复ID的数据集中,每个唯一ID对应一个固定的BMI值对吧?

首先先说说你当前的代码思路:循环遍历指定范围的ID,逐个匹配赋值,这个方法虽然能实现功能,但有两个小问题:一是如果ID不是连续的1-36,就会漏掉部分数据或者出现不必要的提示;二是当数据集行数很多时,循环的效率会很低——毕竟pandas天生更适合矢量化操作,而非逐行循环。

给你推荐两个更高效、更简洁的方案:

方案一:用merge做左连接(推荐,逻辑清晰)

先从sorted_df_work里提取唯一的ID-BMI映射关系,再和df_work_2做左连接,这样不管df_work_2里的ID有没有重复,都能自动匹配到对应的BMI值:

# 提取唯一的ID与BMI对应关系(确保每个ID只保留一条记录)
unique_bmi_mapping = sorted_df_work[['ID', 'Body_mass_index']].drop_duplicates(subset='ID')
# 左连接匹配BMI,并重命名列名
df_work_2 = df_work_2.merge(unique_bmi_mapping, on='ID', how='left').rename(columns={'Body_mass_index': 'BMI'})

这样处理后,df_work_2里所有行都会保留,找不到匹配ID的行,BMI列会显示NaN,你可以用df_work_2[df_work_2['BMI'].isna()]快速查看哪些ID没匹配上,比循环打印更高效。

方案二:用map字典映射(更简洁)

先把sorted_df_work转成ID到BMI的字典,再用map函数直接给df_work_2添加列:

# 创建ID到BMI的字典(先去重保证每个ID对应唯一值)
bmi_dict = sorted_df_work.drop_duplicates(subset='ID').set_index('ID')['Body_mass_index'].to_dict()
# 为df_work_2添加BMI列
df_work_2['BMI'] = df_work_2['ID'].map(bmi_dict)

这个方法代码更短,适合只需要添加单一列的场景,同样,未匹配到的ID对应的BMI值会是NaN。

对比你原来的循环写法,这两种方法都不需要手动指定ID范围,能自动处理所有存在的ID,而且在大数据量下速度会快很多哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:42:57