如何基于配对索引列表合并Pandas中的df1与df2?
基于配对索引列表合并两个DataFrame
核心思路
通过构造df1行索引与df2行索引的一一配对关系,分别提取两个DataFrame中对应行的副本,再将它们按列拼接,就能实现自定义的合并逻辑。这种方式绕开了Pandas复杂的merge计算,直接基于索引定位行,效率更高。
具体实现步骤
假设你的matches列表格式为[[1,2,7,14], [1,2,7,14], [3,8]],对应df1的第0、1、2行分别需要匹配df2的指定行,代码如下:
生成索引配对列表
先把matches转换成(df1行索引, df2行索引)的配对元组列表,明确每一组需要合并的行:# 生成索引配对 index_pairs = [] for df1_idx, df2_indices in enumerate(matches): for df2_idx in df2_indices: index_pairs.append( (df1_idx, df2_idx) )或者用更简洁的列表推导式:
index_pairs = [ (i, j) for i, js in enumerate(matches) for j in js ]提取对应行数据
分别从df1和df2中提取配对列表对应的行:import pandas as pd # 提取df1的重复行(按配对次数复制) df1_selected = df1.loc[ [pair[0] for pair in index_pairs] ].reset_index(drop=True) # 提取df2的对应行 df2_selected = df2.loc[ [pair[1] for pair in index_pairs] ].reset_index(drop=True)合并两个提取后的DataFrame
直接按列拼接即可得到最终的合并结果:merged_df = pd.concat([df1_selected, df2_selected], axis=1)
补充说明
- 这种方法完全基于索引直接定位行,避免了Pandas merge过程中的复杂匹配计算,适合自定义配对逻辑的场景。
- 如果df1的行索引不是默认的0开始整数,只需把
enumerate(matches)换成遍历df1的实际索引:index_pairs = [ (df1_idx, df2_idx) for df1_idx, df2_indices in zip(df1.index, matches) for df2_idx in df2_indices ]
内容的提问来源于stack exchange,提问作者webb
相关产品推荐
相关产品推荐

