Python 更新数据帧ID w.r.t缺少日期列值

Python 更新数据帧ID w.r.t缺少日期列值,python,pandas,Python,Pandas,我正在尝试更新dataframe的ID,该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 如果数据帧超过指定的周期(周期=2)缺少的天数ID应该

我正在尝试更新dataframe的ID,该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
如果数据帧超过指定的
周期(周期=2)
缺少的
天数
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

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



我使用您的示例数据运行代码,并获得
slic=[0,5,12,13]
。并且所有行的预期输出都已更改。你能解释一下原因吗?@jezrael,我之前没有包括所有代码,我只是编辑了这个问题,请看一看
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