如何为id列表中每个值关联完整DataFrame生成带id列的合并表
你需要实现的是ID列表与原始DataFrame的笛卡尔积(全量两两匹配),可以用以下两种方法实现:
前置测试数据构造
import pandas as pd # 注意不要用list作为变量名,会覆盖Python内置的list类型,这里改名为id_list id_list = ['id1', 'id2', 'id3'] df = pd.DataFrame({ 'A': ['A1', 'A2', 'A3'], 'B': ['B1', 'B2', 'B3'] })
方法1:cross 合并(推荐,适用于pandas 1.2.0及以上版本)
语法简单直观,性能较好:
# 先将ID列表转为DataFrame id_df = pd.DataFrame({'id': id_list}) # 执行笛卡尔积合并 result = id_df.merge(df, how='cross')
方法2:assign + explode (兼容pandas老版本)
不需要依赖高版本新特性:
# 给原df新增一列存储完整id列表,再拆分展开为多行,最后调整列顺序 result = df.assign(id=[id_list]).explode('id').reset_index(drop=True)[['id', 'A', 'B']]
两种方法得到的result都和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Cookye
相关产品推荐
相关产品推荐

