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

为指定DataFrame列添加基于另一列值的后缀并合并多DataFrame

解决DataFrame列名后缀添加与合并问题

核心问题分析

你的代码存在两个关键问题:

  • 列名拼接逻辑错误:直接在f-string中引用df.year.astype(str)会返回整个Series而非单个年份值,且字符串拼接语法有误
  • 未实现多DataFrame合并的逻辑

以下是修正后的完整解决方案:

步骤1:定义配置与处理逻辑

先明确列分组规则,再针对每个DataFrame提取年份后缀并修改列名:

import pandas as pd

# 定义需要添加后缀的列分组
calender1 = ['november', 'december']
calender2 = ['january', 'february']

# 示例DataFrame字典(替换为你的实际数据)
df_dict = {
    'df1': pd.DataFrame({'col1': range(101), 'col2': range(101), 
                         'november': range(101), 'december': range(101),
                         'january': range(101), 'february': range(101),
                         'years': [1718]*101}),
    'df2': pd.DataFrame({'col1': range(102), 'col2': range(102), 
                         'november': range(102), 'december': range(102),
                         'january': range(102), 'february': range(102),
                         'years': [1819]*102})
}

# 处理每个DataFrame并收集结果
processed_dfs = []
for df in df_dict.values():
    # 提取年份后两位(每个DataFrame的years值统一,取第一个值即可)
    year_full = str(df['years'].iloc[0])
    suffix_cal1 = year_full[-2:]
    suffix_cal2 = str(int(suffix_cal1) + 1)
    
    # 批量修改列名
    new_cols = []
    for col in df.columns:
        if col in calender1:
            new_cols.append(f"{col}_{suffix_cal1}")
        elif col in calender2:
            new_cols.append(f"{col}_{suffix_cal2}")
        else:
            new_cols.append(col)
    df.columns = new_cols
    processed_dfs.append(df)

# 合并所有处理后的DataFrame
merged_df = pd.concat(processed_dfs, ignore_index=True)

关键修正说明

  1. 年份后缀提取:
    • 用df['years'].iloc[0]获取单个年份值(因每个DataFrame的years列值统一)
    • 通过字符串切片year_full[-2:]提取后两位,转整数加1得到calender2的后缀
  2. 列名修改:
    • 遍历列名时根据所属分组拼接对应后缀,避免原代码中引用整个Series的错误
  3. DataFrame合并:
    • 使用pd.concat()合并所有处理后的DataFrame,ignore_index=True重置合并后的索引

结果验证

处理后:

  • df1的列名变为col1, col2, november_17, december_17, january_18, february_18, years
  • df2的列名变为col1, col2, november_18, december_18, january_19, february_19, years
  • 合并后的merged_df包含所有行数据,列名统一为处理后的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:35:26