如何基于另一DataFrame的列值更新当前DataFrame的指定列
错误原因
- 原始代码直接取全量
origin_details的Country列参与计算,该列共6行数据,但employee_details只有4行,二者长度不匹配因此抛出ValueError - 没有基于
Personal_ID做关联匹配,就算两个表行数一致,也会出现ID对应错误的问题
可行解决方案
用map做ID到Country的映射,不会修改两个原始DataFrame的任何数据,完全保留origin_details的全量内容供后续使用:
import pandas as pd import numpy as np employee = { 'Personal_ID': ['1000123', '1100258', '1104682', '1020943'], 'Name': ['Tom', 'Joseph', 'Krish', 'John'], 'Age': ['40', '35', '43', '51'], 'Eligible': ' '} origin = { 'Personal_ID': ['1000123', '1100258', '1104682', '1020943', '1573482', '1739526'], 'Country': ['UK', 'USA', 'FRA', 'SWE', 'UK', 'AU']} employee_details = pd.DataFrame(employee) origin_details = pd.DataFrame(origin) # 构建Personal_ID到Country的映射字典,不会修改origin_details原有数据 id_to_country = origin_details.set_index('Personal_ID')['Country'].to_dict() # 匹配employee对应的Country后判断是否符合条件 employee_details['Eligible'] = np.where(employee_details['Personal_ID'].map(id_to_country) == 'UK', 'Yes', 'No') print(employee_details)
输出结果
Personal_ID Name Age Eligible 0 1000123 Tom 40 Yes 1 1100258 Joseph 35 No 2 1104682 Krish 43 No 3 1020943 John 51 No
如果后续需要处理employee_details中存在但origin_details中不存在的ID,在np.where里增加缺失值的兜底逻辑即可。
内容的提问来源于stack exchange,提问作者user01
相关产品推荐
相关产品推荐

