如何在Python 3.7中合并行列数不同的两个DataFrame
适配Python 3.7的DataFrame合并填充方案
需求场景:
- 现有两个行列数不一致的DataFrame:df1仅1行数据,df2有7行数据
- 需要将df1的所有列值向下填充,与df2的每一行一一对应,合并为包含所有列的完整DataFrame
- 此前在Python 3.9+环境中使用
pd.concat([df1, df2], axis=1).ffill()可实现,但该逻辑在Python 3.7中无法生效,需适配低版本方案
示例数据构造
import pandas as pd # 构造df1 df1 = pd.DataFrame({ 'c1': ['abc'], 'c2': ['2024-05-02'], 'c3': ['EOC'], 'c4': [12.7], 'c5': ['xyz'], 'c6': [3] }) # 构造df2 df2 = pd.DataFrame({ 's1': [34.7, 35.7, 44.7, 67.7, 90.7, 7, 12], 's2': [83.9, 73.5, 21.4, 56.1, 79, 21.4, 83.9], 's3': [0]*7, 's4': [67]*7 })
适配Python 3.7的解决方案
方法1:扩展df1行数后合并
直接将df1的行重复至与df2行数一致,再横向合并两个DataFrame:
# 扩展df1到与df2相同行数 df1_expanded = pd.concat([df1] * len(df2), ignore_index=True) # 横向合并 result = pd.concat([df1_expanded, df2], axis=1)
方法2:利用索引对齐自动填充
通过让df1匹配df2的索引,利用pandas的索引对齐特性自动填充行数据,再合并:
# 让df1对齐df2的索引,自动填充所有行 df1_aligned = df1.loc[df2.index] # 横向合并 result = pd.concat([df1_aligned, df2], axis=1)
两种方法都能在Python 3.7环境中稳定运行,最终得到的结果DataFrame会包含df1的所有列(每行值与原df1一致)和df2的所有列,行数与df2相同。
内容的提问来源于stack exchange,提问作者Kavya shree
相关产品推荐
相关产品推荐

