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

如何在Python Dataframe中按年月重组日期索引的数据

按年月重组日期索引DataFrame的实现方案

需求说明

你有一个以FECHA为日期索引的DataFrame,需将数据重组为:

  • 行:西班牙语月份名称(Enero至Diciembre)
  • 列:日期的日(1-31)
  • 单元格:对应月份同一天的聚合值(示例为均值)

实现步骤与代码

假设你的DataFrame名为df,按以下步骤处理:

  1. 确保索引为datetime类型
    如果索引还不是日期格式,先转换:
import pandas as pd

df.index = pd.to_datetime(df.index)
  1. 提取月份(西语)和日字段
    从日期索引中拆分出月份名称和日:
# 生成西语月份列,Linux/macOS一般默认支持es_ES locale,Windows可改用手动映射
df['MES'] = df.index.month_name(locale='es_ES')
df['DIA'] = df.index.day
  1. 透视表重组数据
    使用pivot_table按月份和日聚合,这里以SUMA列的均值为例,可替换为sum等其他聚合函数:
# 生成透视表,索引为月份,列为日,值为SUMA的均值
resultado = df.pivot_table(
    index='MES',
    columns='DIA',
    values='SUMA',
    aggfunc='mean'
)
  1. 调整月份顺序
    默认透视表会按字母排序月份,需手动指定西语月份的自然顺序:
orden_meses = [
    'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',
    'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'
]
resultado = resultado.reindex(orden_meses)
  1. 格式化小数显示
    将结果的小数分隔符改为逗号,匹配示例格式:
# 保留6位小数,替换小数点为逗号,空值显示为空字符串
resultado = resultado.applymap(lambda x: f"{x:.6f}".replace('.', ',') if pd.notna(x) else '')
  1. 查看最终结果
print(resultado)

补充说明

  • 若需处理其他列(如H04_PEDRO_MARIN),只需修改pivot_table中的values参数为对应列名
  • Windows系统若无法识别es_ES locale,可手动映射月份:
    mes_map = {
        1: 'Enero', 2: 'Febrero', 3: 'Marzo', 4: 'Abril', 5: 'Mayo', 6: 'Junio',
        7: 'Julio', 8: 'Agosto', 9: 'Septiembre', 10: 'Octubre', 11: 'Noviembre', 12: 'Diciembre'
    }
    df['MES'] = df.index.month.map(mes_map)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:55:37