Pandas DataFrame中的关联引用:如何通过DataFrame A的Person_Id快速引用以Person_Id为索引的DataFrame B
快速关联两个Pandas DataFrame的方法
当然有啦!这里有几个超便捷的方法,能让你在访问DataFrame A的Person_Id时,快速调取DataFrame B里的对应信息,一起来看看:
方法1:用merge合并数据(最直观)
直接把两个DataFrame按Person_Id关联起来,合并后就能在同一个DataFrame里同时访问A和B的所有信息,后续操作非常顺手。示例代码如下:
import pandas as pd # 模拟你的DataFrame结构 df_a = pd.DataFrame({'Person_Id': [1, 2, 3, 4]}) df_b = pd.DataFrame( {'Age': [25, 30, 35, 40], 'City': ['NY', 'LA', 'Chicago', 'Houston']}, index=[1, 2, 3, 4] # B的索引是Person_Id ) # 先把B的索引转为列,方便合并 df_b_reset = df_b.reset_index().rename(columns={'index': 'Person_Id'}) # 左合并保留A的所有行,匹配B的对应信息 merged_df = df_a.merge(df_b_reset, on='Person_Id', how='left') print(merged_df)
合并完成后,你可以直接通过条件筛选获取目标信息,比如merged_df[merged_df['Person_Id'] == 2]['City']就能拿到Person_Id=2对应的城市。
方法2:用map快速映射单个列
如果只需要从B中提取某一列的信息,map绝对是最简洁高效的选择。比如给A新增一列Age,直接一行代码搞定:
# 利用B的索引和对应列创建映射关系,快速赋值 df_a['Age'] = df_a['Person_Id'].map(df_b['Age']) # 同理,添加City列 df_a['City'] = df_a['Person_Id'].map(df_b['City']) print(df_a)
这种方法代码短、执行快,适合只需要提取少量字段的场景。
方法3:用apply结合loc灵活调取
如果需要一次性获取B里的多个信息,或者要对信息做自定义处理,apply配合loc的组合会非常灵活:
def get_person_details(person_id): # 通过loc按索引获取B的对应行,转成字典方便后续提取字段 return df_b.loc[person_id].to_dict() # 给A新增一列,存储该Person_Id对应的所有信息 df_a['Person_Details'] = df_a['Person_Id'].apply(get_person_details) # 后续可以这样访问单个字段 print(df_a.loc[0, 'Person_Details']['City']) # 输出第一个Person_Id对应的城市
这种方法自由度很高,适合需要对B的信息做额外加工的场景。
内容的提问来源于stack exchange,提问作者A1122
相关产品推荐
相关产品推荐

