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

如何在DataFrame中补全'day'列的缺失天数并填充缺失值?

补全DataFrame日期序列并填充缺失值的解决方案

这里有个简洁的方法帮你补全day列的完整日期,同时把缺失天数对应的trans值填充为NaN,用pandas就能轻松实现:

步骤1:准备原始数据

首先把你的原始数据转换成pandas DataFrame:

import pandas as pd

# 原始DataFrame数据
raw_data = {
    'id': [0, 1, 2, 3, 4, 5],
    'month': [8, 8, 8, 8, 8, 8],
    'day': [1, 2, 3, 4, 6, 8],
    'trans': [9, 5, 10, 6, 4, 4]
}
df = pd.DataFrame(raw_data)

步骤2:生成完整的日期基准表

因为需要补全1到8日的所有天数,先创建一个包含完整day序列的基准表,同时统一month为8:

# 生成1-8日的完整序列
full_day_range = pd.DataFrame({'day': range(1, 9)})
full_day_range['month'] = 8  # 所有行的month都为8

步骤3:合并数据并填充缺失值

用**外连接(outer join)**把原始数据和基准表合并,这样就能保留所有日期,缺失的trans会自动填充为NaN:

# 按month和day合并,保留所有行
merged_df = pd.merge(full_day_range, df, on=['month', 'day'], how='outer')

步骤4:重置id列并调整顺序

最后重置id列,让它变成连续的序列,同时调整列的顺序和你期望的输出一致:

# 生成新的连续id
merged_df['id'] = range(len(merged_df))
# 调整列的顺序
merged_df = merged_df[['id', 'month', 'day', 'trans']]

最终输出结果

运行完上面的代码后,merged_df就会和你期望的结果一致:

id  month  day  trans
0   0      8    1    9.0
1   1      8    2    5.0
2   2      8    3   10.0
3   3      8    4    6.0
4   4      8    5    NaN
5   5      8    6    4.0
6   6      8    7    NaN
7   7      8    8    4.0

注:pandas中默认用NaN表示缺失值,和你写的NAN是同一个意思,如果需要显示为大写的NAN,可以用merged_df['trans'] = merged_df['trans'].fillna('NAN')来替换。

内容的提问来源于stack exchange,提问作者Youssef Razak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:30:53