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

Python Pandas:如何将月度不同日期的数据合并为单月行?

解决Pandas中按月合并多发布日期经济指标数据的问题

问题分析

核心需求是将同一月份内多次发布的经济指标数据合并为一行,保留每个指标的最新有效值(避免求和/均值等错误聚合方式),同时处理行内的NaN值。

示例数据准备

基于你提供的示例构建DataFrame:

import pandas as pd

data = {
    'Dates': ['01.01.20', '08.01.20', '02.02.20', '01.03.20', '31.03.20'],
    'Indicator 1': [1, 2, 5, 8, 7],
    'Indicator 2': [1, pd.NA, 5, 6, 7]
}
df = pd.DataFrame(data)

分步解决方案

  1. 转换日期并排序
    先把日期列转为datetime格式,并按日期排序,确保同一月份内的数据按发布时间先后排列:

    # 转换日期格式(匹配你的输入格式)
    df['Dates'] = pd.to_datetime(df['Dates'], format='%d.%m.%y')
    # 按日期排序,保证后续取最新值的逻辑正确
    df = df.sort_values('Dates')
    # 提取月份周期,作为分组依据
    df['Month'] = df['Dates'].dt.to_period('M')
    
  2. 按月分组并保留最新有效值
    使用分组聚合,对每个指标取分组内最后一个非NaN值(即最新发布的有效数据):

    # 按月份分组,聚合逻辑:取每个指标的最后一个非空值
    result = df.groupby('Month').agg(
        lambda x: x.dropna().iloc[-1] if not x.dropna().empty else pd.NA
    )
    # 清理结果:去掉原日期列,重置索引
    result = result.drop('Dates', axis=1).reset_index()
    

最终结果

运行后得到的result如下:

MonthIndicator 1Indicator 2
2020-0121
2020-0255
2020-0377

关键逻辑说明

  • 排序保证了同一月份内的数据按发布时间从早到晚排列,最后一个非NaN值就是该指标的最新修正值。
  • 聚合时跳过NaN值,避免了将后续发布的NaN覆盖之前的有效值(比如1月8日的Indicator2为NaN,会保留1月1日的1)。
  • 完全规避了求和、均值等错误的聚合方式,符合经济指标更新的业务逻辑。

内容的提问来源于stack exchange,提问作者Hinnerk Lührs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:05:22