【问题标题】:Add missing days in a dataframe在数据框中添加缺失的日期
【发布时间】:2021-04-06 19:48:30
【问题描述】:

我需要在“天”列中填写缺失的天数:

    id  month   day trans
0   0     8     1   9
1   0     8     2   5
2   0     8     3   10
3   0     8     4   6
4   0     8     6   4
5   0     8     8   4

我正在寻找输出:

    id  month   day trans
0   0     8     1   9
1   0     8     2   5
2   0     8     3   10
3   0     8     4   6
4   0     8     5   NAN
5   0     8     6   4
6   0     8     7   NAN
7   0     8     8   4

【问题讨论】:

  • Feb 月份你是怎么处理的?
  • 在这种情况下,我只是处理 8 月和 10 月
  • 所有组的天数是否相同或可能不同?如果他们不同,当下一组有 4 天时会发生什么?你能稍微修改一下这个例子吗?

标签: python pandas dataframe date missing-data


【解决方案1】:

我认为处理它的最佳方法是构建一个 pandas df,它具有输出的所有 [month, day] 值,并在 [id, month, day] 键上合并您的第一个 df。

【讨论】:

    【解决方案2】:

    使用 reindex()

    df1=df.set_index('day').reindex([1,2,3,4,5,6,7]).reset_index()
    df1[['month','id']]=df1[['month','id']].ffill()
    

    关注您的评论;

      mux = pd.MultiIndex.from_product([df['id'].unique(),[1,2,3,4,5,6,7]], names=['id','day'])
    df1=df.set_index(['id','day']).reindex(mux).reset_index()   
    df1[['month','id']]=df1[['month','id']].ffill()
    
    
    
    id  day  month  #trans
    0   0    1    8.0     9.0
    1   0    2    8.0     5.0
    2   0    3    8.0    10.0
    3   0    4    8.0     6.0
    4   0    5    8.0     NaN
    5   0    6    8.0     4.0
    6   0    7    8.0     NaN
    

    【讨论】:

    • 我收到以下错误:ValueError: cannot reindex from a duplicate axis
    • 您可能在日期列中有重复的日期。如果是这样,解决方案是使用至少两列来投射不同的类别。在这种情况下,让我们添加idmux = pd.MultiIndex.from_product([df['id'].unique(),[1,2,3,4,5,6,7]], names=['id','day'])df.set_index(['id','day']).reindex(mux)
    • 有帮助吗,愿意进一步提供帮助
    • 谢谢,为答案投票,以便人们将来可以放心地使用您的问题和我的答案。为你投票
    【解决方案3】:

    使用 pandas 上采样。

    df['date'] = df.apply(lambda x: datetime(2020, x['month'], x['day']), axis=1)
    df = df.set_index('date')
    # Upsampling
    df_daily = df.resample('D').asfreq().reset_index()
    
    # reassign month and day
    df_daily['month'] = df_daily.date.dt.month
    df_daily['day'] = df_daily.date.dt.day
    df_daily['id'] = df_daily['id'].fillna(method='ffill').astype(int)
    del df_daily['date']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-22
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多