如何匹配两个DataFrame的关联列并生成对应结果列
匹配DataFrame生成对应列的实现方法
这里提供两种高效方法,实现将df1的id与df2的fruit_id匹配、生成result列的需求:
方法一:使用merge()左连接
merge是Pandas表连接的核心方法,左连接可完整保留df1的所有行,同时匹配df2中的对应数据:
import pandas as pd # 初始化原始DataFrame a = [1,1,1,2,3,4,4,5,6] df1 = pd.DataFrame(a, columns=["id"]) x = [1,2,3,4,5,6] y = ["apple","orange","banana","lemon","kiwi","melon"] df2 = pd.DataFrame(list(zip(x, y)), columns=["fruit_id", "fruit_name"]) # 执行左连接,指定匹配键 result_df = pd.merge(df1, df2, left_on="id", right_on="fruit_id", how="left") # 重命名列并保留目标字段 result_df = result_df.rename(columns={"fruit_name": "result"})[["id", "result"]] print(result_df)
输出结果:
id result 0 1 apple 1 1 apple 2 1 apple 3 2 orange 4 3 banana 5 4 lemon 6 4 lemon 7 5 kiwi 8 6 melon
方法二:使用map()字典映射
若df2的fruit_id为唯一值,这种方法更简洁高效,通过字典映射直接生成目标列:
import pandas as pd # 初始化原始DataFrame a = [1,1,1,2,3,4,4,5,6] df1 = pd.DataFrame(a, columns=["id"]) x = [1,2,3,4,5,6] y = ["apple","orange","banana","lemon","kiwi","melon"] df2 = pd.DataFrame(list(zip(x, y)), columns=["fruit_id", "fruit_name"]) # 将df2转换为id到名称的映射字典 fruit_mapping = df2.set_index("fruit_id")["fruit_name"].to_dict() # 映射生成result列 df1["result"] = df1["id"].map(fruit_mapping) print(df1)
该方法直接在原df1上添加result列,输出结果与方法一完全一致。
内容的提问来源于stack exchange,提问作者Yippee
相关产品推荐
相关产品推荐

