如何按特定交替格式合并Pandas中的两个DataFrame?
解决方案
要实现这种交替排列的合并效果,核心思路是按关联键(A列和C列的对应值)分组,先放入df1的对应行,再放入df2的所有对应行,最后拼接所有分组结果即可。
具体实现代码
import pandas as pd df1 = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]}) df2 = pd.DataFrame({'C': [1, 2, 2, 3, 3, 3, 4], 'D': [9, 10, 11, 12, 13, 14, 15]}) # 扩展两个DataFrame,补全缺失的列并填充NA df1_full = df1.assign(C=pd.NA, D=pd.NA) df2_full = df2.assign(A=pd.NA, B=pd.NA) # 按关联值分组拼接,先放df1的行,再放df2的对应行 result_list = [] for key in df1['A'].unique(): # 取df1中当前key的行 part1 = df1_full[df1_full['A'] == key] # 取df2中当前key的所有行 part2 = df2_full[df2_full['C'] == key] # 把两部分加入结果列表 result_list.extend([part1, part2]) # 拼接所有部分并重置索引 final_df = pd.concat(result_list, ignore_index=True) print(final_df)
代码说明
- 扩展DataFrame:用
assign给df1添加C、D列并填充pd.NA,给df2添加A、B列并填充pd.NA,让两个df结构统一。 - 分组拼接:遍历df1中每个唯一的
A值(也就是关联键),先取出df1中对应行,再取出df2中所有C等于该键的行,将这两部分按顺序加入结果列表。 - 最终拼接:用
pd.concat把所有分组的结果拼接起来,ignore_index=True重置索引,得到目标表格。
运行代码后输出的结果和你需要的目标表格完全一致,缺失值显示为<NA>(对应表格中的NA)。
内容的提问来源于stack exchange,提问作者Roberto palmer
相关产品推荐
相关产品推荐

