代码之家  ›  专栏  ›  技术社区  ›  Naga kiran

更新dataframe ID w.r.t missing dates列值

  •  2
  • Naga kiran  · 技术社区  · 6 年前

    我正在尝试更新dataframe的ID,与dataframe中缺少的days of date列有关,

            Date    ID
    0   2018-01-01  45.0-A
    1   2018-01-02  45.0-A
    5   2018-01-06  45.0-A
    6   2018-01-07  45.0-A
    12  2018-01-13  45.0-A
    13  2018-01-14  45.0-A
    
    period = 2
    

    如果数据帧具有超过指定的 period (period =2 ) 属于 days missing ID应该用额外的数字更新,我用时差和数据帧循环解决了这个问题,这需要更多的时间。有人能给我建议最有效的方法吗?

    T_diff = data.Date.diff()
    slic = [data.index[0]] + T_diff[T_diff.dt.days>period].index.tolist() + [data.index[-1]]
    li = []
    for i in range(len(slic)-1):
        temp_df = data.loc[slic[i]:slic[i+1]].copy()
        temp_df['ID'] = temp_df['ID'] + '_{}'.format(i)
        li.append(temp_df)
    pd.concat(li,axis=0)
    
             Date   ID
    0   2018-01-01  45.0-A_0
    1   2018-01-02  45.0-A_0
    5   2018-01-06  45.0-A_1
    6   2018-01-07  45.0-A_1
    12  2018-01-13  45.0-A_2
    13  2018-01-14  45.0-A_2
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   Jondiedoop    6 年前

    这可以在一行中完成,使用diff()和cumsum()

    df['Date'] = pd.to_datetime(df['Date'])
    df['ID'] += '_' + (df['Date'].diff() > pd.Timedelta('2D')).cumsum().astype(str)
    
    
    #output
    #         Date        ID
    #0  2018-01-01  45.0-A_0
    #1  2018-01-02  45.0-A_0
    #5  2018-01-06  45.0-A_1
    #6  2018-01-07  45.0-A_1
    #12 2018-01-13  45.0-A_2
    #13 2018-01-14  45.0-A_2
    

    推荐文章