如何为pandas DataFrame的日期列添加curr_week、prev_week前缀完成重命名
Pandas DataFrame列重命名实现方案
问题原因
你原有代码的核心问题是强依赖列的原始排序,一旦数据导入时列顺序发生变化,就会出现前缀匹配错误的情况。同时如果后续扩展为多周数据,硬编码索引的写法也没有可复用性。如果你的列名是datetime类型而非字符串,直接拼接字符串也会导致重命名失效。
正确实现方法
方案1:直接替换列名(推荐,逻辑简单高效)
先对列名按日期降序排序,确保最新日期对应curr_week前缀,更早的日期对应prev_week前缀,再直接替换列名:
import pandas as pd # 你的原始DataFrame df=pd.DataFrame(data={'2021-11-21':['10','20'],'2021-11-14':['39','21']}) # 可选:如果列名是datetime类型,先转成字符串格式 # df.columns = df.columns.strftime('%Y-%m-%d') # 按日期降序排序列名 sorted_cols = sorted(df.columns, reverse=True) # 生成新列名 df.columns = [f'curr_week_{sorted_cols[0]}', f'prev_week_{sorted_cols[1]}']
方案2:使用rename方法实现
如果你需要保留其他列名不变,仅修改这两列,可以用rename方法:
# 可选:如果列名是datetime类型,先转成字符串格式 # df.columns = df.columns.strftime('%Y-%m-%d') sorted_cols = sorted(df.columns, reverse=True) col_mapper = { sorted_cols[0]: f'curr_week_{sorted_cols[0]}', sorted_cols[1]: f'prev_week_{sorted_cols[1]}' } df = df.rename(columns=col_mapper)
注意:两种方案都自动适配列的原始顺序,只要是两列周度日期数据,都可以正确匹配前缀。
内容的提问来源于stack exchange,提问作者Bushmaster
相关产品推荐
相关产品推荐

