如何合并列名带后缀的多个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
相关产品推荐
相关产品推荐

