Pandas如何复制指定列表头到新增计算列适配每月变动表头
解决方案
核心思路是通过列名的命名规则自动匹配对应列,无需硬编码月份名称或列位置,完全适配动态变化的月度表头。
推荐实现代码(最稳健方案)
import pandas as pd df = pd.read_excel('Sale.xlsx') # 自动筛选所有后缀为-sale的销售列 sale_cols = [col for col in df.columns if col.endswith('-sale')] # 提取每个销售列对应的月份前缀 months = [col.split('-')[0] for col in sale_cols] # 循环计算每个月总销售额,直接用月份作为新列名 for month in months: df[month] = df[f"{month}-sale"] * df[f"{month}-price"] df.head()
方案说明
- 只要你的表头一直遵循
[月份]-sale、[月份]-price的命名规则,后续新增月份无需修改代码逻辑,会自动识别计算 - 避免了原写法中硬编码列位置的问题,不会因为列顺序调整、列数量增减出现计算错误
- 不需要先生成数字列名再修改,一步到位得到符合要求的结果
补充方案(针对已生成数字列名的场景)
如果你已经通过原代码生成了列名为7、8、9的结果,只想修改这几列的表头,可以用以下代码实现:
# 提取第2-4列(索引为1、2、3,pandas列索引从0开始)的月份前缀 new_col_names = [col.split('-')[0] for col in df.columns[1:4]] # 替换第7-9列的列名 df.columns = df.columns[:6].tolist() + new_col_names
内容的提问来源于stack exchange,提问作者irfanraorao
相关产品推荐
相关产品推荐

