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

如何合并列名带后缀的多个DataFrame,统一列名并纵向堆叠?

处理带数字后缀列名的DataFrame合并堆叠问题

完全可以实现你要的效果,具体操作分两步:

步骤1:统一各DataFrame的列名

核心是把带数字后缀的列名(比如command_83、commands_52)替换为统一的command、state,保留date列不变。可以用正则匹配去掉列名末尾的_数字后缀,同时处理拼写差异(比如B里的commands):

import pandas as pd
import re

# 定义列名清理函数
def clean_col_name(col):
    if col == 'date':
        return col
    # 去掉末尾的下划线加数字部分
    cleaned_col = re.sub(r'_\d+$', '', col)
    # 统一commands为command
    return cleaned_col.replace('commands', 'command')

# 分别清理每个DataFrame的列名
df_a_clean = df_a.rename(columns=clean_col_name)
df_b_clean = df_b.rename(columns=clean_col_name)
df_c_clean = df_c.rename(columns=clean_col_name)

步骤2:纵向堆叠合并处理后的DataFrame

用pd.concat()按A→B→C的顺序把清理好的DataFrame堆叠起来:

result_df = pd.concat([df_a_clean, df_b_clean, df_c_clean], ignore_index=True)

完整可运行示例

结合你给出的示例数据模拟:

import pandas as pd
import re

# 模拟示例DataFrames
df_a = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02'],
    'command_83': ['run', 'stop'],
    'state_83': ['active', 'inactive']
})

df_b = pd.DataFrame({
    'date': ['2024-01-03', '2024-01-04'],
    'commands_52': ['start', 'pause'],
    'state_52': ['running', 'idle']
})

df_c = pd.DataFrame({
    'date': ['2024-01-05', '2024-01-06'],
    'command_67': ['restart', 'shutdown'],
    'state_67': ['booting', 'off']
})

# 列名清理函数
def clean_col_name(col):
    if col == 'date':
        return col
    cleaned_col = re.sub(r'_\d+$', '', col)
    return cleaned_col.replace('commands', 'command')

# 清理列名
df_a_clean = df_a.rename(columns=clean_col_name)
df_b_clean = df_b.rename(columns=clean_col_name)
df_c_clean = df_c.rename(columns=clean_col_name)

# 堆叠合并
result_df = pd.concat([df_a_clean, df_b_clean, df_c_clean], ignore_index=True)

print(result_df)

运行后会得到列名为date、command、state的结果,数据按A→B→C的顺序纵向堆叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:24:40