【问题标题】:Fill in missing dates pandas based off max and min根据 max 和 min 填写缺失的日期 pandas
【发布时间】: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

【问题讨论】:

    标签: python pandas loops numpy conditional


    【解决方案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()
      猜你喜欢
      • 1970-01-01
      • 2021-07-18
      • 2018-06-24
      • 2020-08-18
      • 1970-01-01
      • 2018-05-02
      • 2018-10-05
      • 2019-06-26
      相关资源
      最近更新 更多