Сравнение python значений строк с предыдущими (дубликаты) - PullRequest
1 голос
/ 30 апреля 2020

У меня есть df с дубликатами как таковые:

ID      start_time      end_time    
A          12:00           12:05
A          12:00           12:05
A          12:00           12:05
B          12:10           12:22
B          12:10           12:22
C          12:20           12:25
C          12:20           12:25

Я пытаюсь создать столбец, который сообщает, меньше ли время начала идентификатора, чем время окончания предыдущего идентификатора. Результирующий df должен быть следующим:

ID      start_time      end_time      X
A          12:00           12:05     False
A          12:00           12:05     False
A          12:00           12:05     False
B          12:10           12:22     False
B          12:10           12:22     False
C          12:20           12:25     True
C          12:20           12:25     True

Как видите, ID = C имеет значение true, поскольку его начальное время 12:20 меньше, чем предыдущее конечное время идентификатора 12:22. Полученный df должен сохранять дубликаты из-за уникальных столбцов, не включенных в сферу действия этой проблемы.

Я думаю, что я довольно близок с:

df['x'] = df.drop_duplicates('ID')['start_time'].shift().le(df['end_time'])

Однако результат не ' нести правильный результат через дубликаты.

1 Ответ

1 голос
/ 30 апреля 2020

Использование:

df["X"] = (
    df["ID"].ne(df["ID"].shift()) 
    & pd.to_datetime(df["start_time"]).lt(pd.to_datetime(df["end_time"]).shift())
)

df["X"] = df.groupby("ID")["X"].transform(lambda g: any(g))
print(df)

Печать:

  ID start_time end_time      X
0  A      12:00    12:05  False
1  A      12:00    12:05  False
2  A      12:00    12:05  False
3  B      12:10    12:22  False
4  B      12:10    12:22  False
5  C      12:20    12:25   True
6  C      12:20    12:25   True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...