根据 max 和 min 填写缺失的日期 pandas

Posted

技术标签:

【中文标题】根据 max 和 min 填写缺失的日期 pandas【英文标题】:Fill in missing dates pandas based off max and min 【发布时间】:2018-05-02 08:46:00 【问题描述】:

如何为条件语句创建 python 语句

我有一个如下所示的数据框。我想知道如何根据数据框中的最大最小日期填写缺失的日期。

Day            Movie          Rating
2017-01-01     GreatGatsby    5
2017-01-02     TopGun         5
2017-01-03     Deadpool       1
2017-01-10     PlanetOfApes   2

我怎样才能将缺失的日期填入类似

的内容
Day            Movie          Rating
2017-01-01     GreatGatsby    5
2017-01-02     TopGun         5
2017-01-03     Deadpool       1
2017-01-04     0              0
2017-01-05     0              0
2017-01-06     0              0
2017-01-07     0              0
2017-01-08     0              0
2017-01-09     0              0
2017-01-10     PlanetOfApes   2

【问题讨论】:

【参考方案1】:

相信你需要reindex:

df = (df.set_index('Day')
       .reindex(pd.date_range(df['Day'].min(), df['Day'].max()), fill_value=0)
       .reset_index())

print (df)
       index         Movie  Rating
0 2017-01-01   GreatGatsby       5
1 2017-01-02        TopGun       5
2 2017-01-03      Deadpool       1
3 2017-01-04             0       0
4 2017-01-05             0       0
5 2017-01-06             0       0
6 2017-01-07             0       0
7 2017-01-08             0       0
8 2017-01-09             0       0
9 2017-01-10  PlanetOfApes       2

【讨论】:

【参考方案2】:

使用resample + first/last/min/max

df.set_index('Day').resample('1D').first().fillna(0).reset_index()

         Day         Movie  Rating
0 2017-01-01   GreatGatsby     5.0
1 2017-01-02        TopGun     5.0
2 2017-01-03      Deadpool     1.0
3 2017-01-04             0     0.0
4 2017-01-05             0     0.0
5 2017-01-06             0     0.0
6 2017-01-07             0     0.0
7 2017-01-08             0     0.0
8 2017-01-09             0     0.0
9 2017-01-10  PlanetOfApes     2.0

如果Day 不是datetime 列,请先使用pd.to_datetime 进行转换:

df['Day'] = pd.to_datetime(df['Day'])

asfreq的替代品:

df.set_index('Day').asfreq('D').fillna(0).reset_index()

         Day         Movie  Rating
0 2017-01-01   GreatGatsby     5.0
1 2017-01-02        TopGun     5.0
2 2017-01-03      Deadpool     1.0
3 2017-01-04             0     0.0
4 2017-01-05             0     0.0
5 2017-01-06             0     0.0
6 2017-01-07             0     0.0
7 2017-01-08             0     0.0
8 2017-01-09             0     0.0
9 2017-01-10  PlanetOfApes     2.0

【讨论】:

重采样后再分享一张。 df.set_index('Day').resample('D').asfreq().fillna(0).reset_index() @Wen 看起来很棒。学到了新东西。非常感谢! 对不起,我错过了点击...在我的手机上...df.set_index('Day').asfreq(freq='D').fillna(0).reset_index()

以上是关于根据 max 和 min 填写缺失的日期 pandas的主要内容,如果未能解决你的问题,请参考以下文章

填写缺失的日期值并根据前一行填充第二列

按日期和组聚合并在大查询中填写缺失的日期

ORACLE SQL:填写缺失的日期

Pandas - 在多个时间序列组内插值/插补缺失值

将缺失的日期添加到 pandas 数据框

SQL Server:填写每个实体具有不同日期范围的缺失日期