pandas如何合并两个不等长DataFrame 实现单行表值重复填充至多行
单行DataFrame逐行重复填充到多行主表的实现方法
不需要做复杂的表连接逻辑,pandas原生就支持几种高效实现方式,完全匹配你需要的输出效果:
方法1:直接广播赋值(最省资源,会修改原df1)
pandas支持把单个标量值自动填充到整列,只需要遍历df2的列,把对应列的单行值取出来赋值给df1的新列即可:
# 遍历df2的所有列,取每列的第一个(也是唯一一个)值,广播填充到df1的新列 for col in df2.columns: df1[col] = df2[col].iloc[0]
运行后df1直接生成你期望的带固定a、b、c值的4行结果,没有临时中间表开销。
方法2:横向拼接(不修改原df1)
如果需要保留原df1的内容不被改动,可以先把df2的单行重复到和df1相同的行数,再按索引横向拼接:
# 把df2的单行重复len(df1)次,重置索引后和df1按列拼接 df_result = pd.concat([ df1, df2.loc[df2.index.repeat(len(df1))].reset_index(drop=True) ], axis=1)
方法3:交叉连接(代码最短,适配新版pandas)
pandas 1.2.0及以上版本支持交叉连接模式,因为df2只有1行,交叉连接的结果天然就是df1的每一行都匹配df2的这行固定值:
df_result = df1.merge(df2, how="cross")
注意事项
- 不要直接写
df1[col] = df2[col]这类赋值逻辑,两个表的索引不匹配会导致整列出现NaN值,一定要通过iloc[0]取到具体的标量值再赋值 - 上述方法仅适用于df2为单一行的场景,如果后续df2行数大于1,需要根据实际的列匹配规则调整合并逻辑,不能直接套用
内容的提问来源于stack exchange,提问作者Martin Yordanov Georgiev
相关产品推荐
相关产品推荐

