Копировать запись в другой столбец на основе повторяющегося условия в Python - PullRequest
0 голосов
/ 13 июля 2020

Простите, если подобный вопрос уже задавали. Я новичок ie и пытаюсь заполучить Python.

У меня есть приведенный ниже фрейм данных, который создается из функции pandas DataFrame.duplicated() на основе 'Lo c '(группировка) и' Категория '. Только повторяющиеся записи помечены как True / False, остальные помечены как «Неприменимо»

Number  Loc    Category        Date            Only_Dupes
----------------------------------------------------------
1        A     jetski        01/01/2020       Not Applicable
2        A     kayak         01/02/2020       Not Applicable
3        A     jetski,kayak  01/04/2020       Not Applicable
4        B     jetski        01/05/2020       False
5        B     jetski        01/07/2020       True
6        C     kayak         01/08/2020       False
7        C     kayak         01/09/2020       True
8        C     jetski        01/10/2020       Not Applicable

Код для идентификации дубликатов:

comp1 = df.duplicated(['Loc','Category'])
comp2 = df.groupby(['Loc','Category'])['Category'].transform('count').gt(1)
df['Only_Dupes'] = np.where(comp2,comp1,'Not Applicable')

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

Ожидаемый фрейм данных:

Number  Loc    Category       Date       Only_Dupes    Source_date
---------------------------------------------------------------------------------
1        A     jetski       01/01/2020    Not Applicable       
2        A     kayak        01/02/2020    Not Applicable       
3        A     jetski,kayak 01/04/2020    Not Applicable
4        B     jetski       01/05/2020    False          01/05/2020
5        B     jetski       01/07/2020    True           01/05/2020
6        C     kayak        01/08/2020    False          01/08/2020 
7        C     kayak        01/09/2020    True           01/08/2020
8        C     jetski       01/10/2020    Not Applicable     

Пожалуйста, дайте мне знать, если требуются какие-либо дополнительные разъяснения . Спасибо за помощь. :)

1 Ответ

0 голосов
/ 13 июля 2020

попробуйте duplicated с keep=False и .loc для назначения.

s = df.duplicated(['Loc','Category'],keep=False)


df.loc[s,'SrcDate'] = df.groupby([s,'Loc'])['Date'].transform('min')

print(df)

   Number Loc      Category       Date      Only_Dupes    SrcDate
0       1   A        jetski 2020-01-01  Not-Applicable        NaT
1       2   A         kayak 2020-01-02  Not-Applicable        NaT
2       3   A  jetski,kayak 2020-01-04  Not-Applicable        NaT
3       4   B        jetski 2020-01-05           False 2020-01-05
4       5   B        jetski 2020-01-07            True 2020-01-05
5       6   C         kayak 2020-01-08           False 2020-01-08
6       7   C         kayak 2020-01-09            True 2020-01-08
7       8   C        jetski 2020-01-10  Not-Applicable        NaT
...