Отметить первый раз, когда идентификатор из одного столбца появляется в другом столбце - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть кадр данных, который выглядит следующим образом:

 ID1 ID2 Date
 1   2   01/01/2018
 1   2   03/01/2018
 1   2   04/05/2018
 2   1   06/06/2018
 1   2   08/06/2018
 3   4   09/07/2018

и т. Д.

Что мне нужно сделать, это отметить первый раз, когда идентификатор в ID1 появляется в ID2.В приведенном выше примере это будет выглядеть так:

ID1 ID2 Date         Flag
 1   2   01/01/2018
 1   2   03/01/2018
 1   2   04/05/2018
 2   1   06/06/2018
 1   2   08/06/2018  Y
 3   4   09/07/2018

Я использовал следующий код, чтобы сообщить мне, встречается ли ID1 в ID2:

ID2List= df['ID2'].tolist()
ID2List= list(set(IDList))  # dedupe list
df['ID1 is in ID2List'] = np.where(df[ID1].isin(ID2List), 'Yes', 'No')

Но это только говорит о том, чтоэто случай, когда ID1 появляется в ID2 в какой-то момент, но не в тот момент, когда это происходит впервые.

Любая помощь?

1 Ответ

0 голосов
/ 12 сентября 2018

Одной из идей является использование next с выражением генератора для вычисления индексов совпадений в ID1. Затем сравните с индексом и используйте argmax, чтобы получить индекс первого значения True:

idx = df.apply(lambda row: next((idx for idx, val in enumerate(df['ID1']) \
                                 if row['ID2'] == val), 0), axis=1)

df.loc[(df.index > idx).argmax(), 'Flag'] = 'Y'

print(df)

   ID1  ID2        Date Flag
0    1    2  01/01/2018  NaN
1    1    2  03/01/2018  NaN
2    1    2  04/05/2018  NaN
3    2    1  06/06/2018    Y
4    1    2  08/06/2018  NaN
5    3    4  09/07/2018  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...