为指定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)
关键修正说明
- 年份后缀提取:
- 用
df['years'].iloc[0]获取单个年份值(因每个DataFrame的years列值统一) - 通过字符串切片
year_full[-2:]提取后两位,转整数加1得到calender2的后缀
- 用
- 列名修改:
- 遍历列名时根据所属分组拼接对应后缀,避免原代码中引用整个Series的错误
- 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
相关产品推荐
相关产品推荐

