Обновление идентификатора фрейма данных с отсутствующими значениями столбца дат - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь обновить идентификатор фрейма данных относительно столбца пропущенных дней в фрейме данных,

        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 Ответ

0 голосов
/ 09 октября 2018

Это можно сделать в одну строку, используя 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...