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

如何为Pandas DataFrame补充最新日期缺失的国家数据行

如何为Pandas DataFrame补充最新日期的缺失国家数据行?

嘿,你的需求其实完全可以用更贴合Pandas惯用思路的方法来实现,比你当前的交叉合并写法更优雅。我给你分享两种常用的方案,都是Pandas原生的方法:

首先先回顾下你的原始数据:

import pandas as pd

df = pd.DataFrame(
    data={
        "day": ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-03'],
        "country": ["France", "Brazil", "Brazil", "Cuba", "France"],
        "n": [1, 2, 3, 4, 5]
    }
)

方案1:透视表+堆叠(Pivot Table + Stack)

这种方法通过先把数据转换成“国家-日期”的二维透视表,确保最新日期存在后,再把列转成行,自动补全缺失值:

# 1. 创建透视表:行=国家,列=日期,值=n(用first保证每个国家-日期只保留一个值)
pivot_df = df.pivot_table(index='country', columns='day', values='n', aggfunc='first')

# 2. 获取最新日期,确保它在透视表的列中(通用场景下,即使原数据没有该日期也能添加)
recent_date = df['day'].max()
if recent_date not in pivot_df.columns:
    pivot_df[recent_date] = pd.NA

# 3. 堆叠列转成行,重置索引并重命名列
result = pivot_df.stack().reset_index(name='n')

# 4. 按你的期望调整排序(最新日期在前,国家按字母顺序)
result = result.sort_values(['day', 'country'], ascending=[False, True]).reset_index(drop=True)
print(result)

输出结果正好匹配你的需求:

country         day    n
0     France  2021-01-03  5.0
1     Brazil  2021-01-03  NaN
2       Cuba  2021-01-03  NaN
3     France  2021-01-01  1.0
4     Brazil  2021-01-01  2.0
5     Brazil  2021-01-02  3.0
6       Cuba  2021-01-02  4.0

方案2:多级索引重排(MultiIndex + Reindex)

这种方法直接构建包含所有国家和所有日期的完整多级索引,然后用reindex自动补全缺失的行,非常直观:

import numpy as np

# 1. 获取所有唯一国家和日期
all_countries = df['country'].unique()
all_days = df['day'].unique()

# 2. 确保最新日期在日期列表中(通用场景下可手动添加)
recent_date = df['day'].max()
if recent_date not in all_days:
    all_days = np.append(all_days, recent_date)

# 3. 创建完整的多级索引(国家×日期)
full_index = pd.MultiIndex.from_product([all_countries, all_days], names=['country', 'day'])

# 4. 把原始数据设置为多级索引,再用reindex补全缺失行
result = df.set_index(['country', 'day']).reindex(full_index).reset_index()

# 5. 调整排序到你想要的格式
result = result.sort_values(['day', 'country'], ascending=[False, True]).reset_index(drop=True)
print(result)

这两种方法都比交叉合并更符合Pandas的“索引优先”设计理念,代码更简洁易读,也更容易维护。

标题建议

如果要优化提问标题,可以考虑这些更精准的表述:

  • 《如何用Pandas为最新日期补全缺失的国家数据行?》
  • 《Pandas:如何为特定日期补充分组缺失的记录?》

内容的提问来源于stack exchange,提问作者Be Chiller Too

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:34:06