You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将一个pandas DataFrame插入另一个DataFrame实现汇总拼接

可行实现方案

常规的append、merge、concat默认会按列名对齐字段,自然会把两个表不同的列名拆成新列,不符合你要的上下堆叠汇总的需求。你要的效果本质是不做列对齐,把每个表的列名当成普通首行,表之间插空行后纵向拼接即可,直接用下面的代码就能实现:

第一步:准备示例数据(你可以替换成自己的真实数据)

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
    'col1': [45],
    'col2': [69],
    'col3': ['string'],
    'col4': ['string']
})

df2 = pd.DataFrame({
    'col5': [45, 'data'],
    'col8': [37, 'random']
})

第二步:核心拼接函数

def stack_df_blocks(*input_dfs, blank_line_num=2):
    block_list = []
    for i, df in enumerate(input_dfs):
        # 将原表列名转为第一行数据
        col_row = pd.DataFrame([df.columns], columns=df.columns)
        # 合并列名行和原数据行
        df_block = pd.concat([col_row, df], ignore_index=True).values
        block_list.append(df_block)
        # 非最后一个表的话,插入指定数量的空行
        if i != len(input_dfs) - 1:
            blank_rows = np.full((blank_line_num, df.shape[1]), '', dtype=object)
            block_list.append(blank_rows)
    
    # 不同表列数不一致时,按最大列数补空对齐,避免拼接报错
    max_col_count = max(block.shape[1] for block in block_list)
    padded_blocks = []
    for block in block_list:
        if block.shape[1] < max_col_count:
            pad_part = np.full((block.shape[0], max_col_count - block.shape[1]), '', dtype=object)
            block = np.concatenate([block, pad_part], axis=1)
        padded_blocks.append(block)
    
    # 生成最终无列名的汇总DataFrame
    res = pd.DataFrame(np.concatenate(padded_blocks, axis=0))
    return res

调用方法

final_df = stack_df_blocks(df1, df2, blank_line_num=2)
# 打印时去掉索引和默认表头,完全匹配你要的展示效果
print(final_df.to_string(index=False, header=False))

输出结果

col1 col2    col3    col4
  45   69  string  string


col5    col8
   45      37
 data  random

如果需要调整两个表之间的空行数量,直接修改blank_line_num参数即可,函数也支持同时传入2个以上的DataFrame做同样的堆叠汇总。


内容的提问来源于stack exchange,提问作者Frank Shrestha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:51:25