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

如何用Pandas为DataFrame补全每月剩余日期并填充首日值?

问题解决:按国家补全每日货币数据并填充首日值

错误原因

你之前的代码报错是因为Date列并非唯一索引——多个国家在同一天(比如2021-01-01)都有数据,将Date设为索引后会出现重复值,而asfreq方法要求索引必须是唯一的时间序列,因此触发了ValueError。

解决方案:按国家分组处理

每个国家的货币数据是独立的时间序列,需按国家分组后分别补全日期,再合并结果。具体实现如下:

代码示例

import pandas as pd

# 假设你的原始DataFrame名为df
# 按ISO代码分组,每个国家单独处理时间序列
df_daily = df.groupby('ISO_Code', group_keys=False).apply(
    lambda group: group.set_index('Date').asfreq('D', method='ffill').reset_index()
)

# 重置最终索引(可选,根据需求调整)
df_daily = df_daily.reset_index(drop=True)

代码说明

  • groupby('ISO_Code'):按国家唯一标识(ISO代码)分组,确保每个分组对应单个国家的月度数据
  • apply(lambda group: ...):对每个国家的子数据集执行补全操作:
    • set_index('Date'):将当前分组的日期设为索引(此时分组内的日期是唯一的,每个国家每月仅一条首日数据)
    • asfreq('D', method='ffill'):将时间序列补全为每日频率,并用前向填充(ffill)沿用当月首日的数值
    • reset_index():将日期重新转为列,方便后续合并
  • group_keys=False:避免保留额外的分组键列,让结果结构更简洁

结果验证

处理完成后,每个国家的每个月会从首日补全至当月最后一天,所有新增日期的value列将沿用该月首日数值,Currency_Name、Base_Currency等其他列也会自动填充对应国家的信息。

内容的提问来源于stack exchange,提问作者2837a

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:40:33