Я пытаюсь сгруппировать данные по нескольким столбцам, а затем объединить значения в другие столбцы.Хотя я нашел множество примеров этого в Интернете, я сталкиваюсь с проблемами, когда пытаюсь применить те же методы к моей DataFrame
.Я думаю, это может быть связано с размером (1,5 мм + строки).
У меня есть DataFrame
с информацией об имени и адресе, а также два столбца «источника»:
In [45]: df
Out[45]:
Firstname Lastname Address Zip5 Source_A Source_B
0 'John' 'Smith' '1 May St' '10001' 1 0
1 'Lou' 'Brown' '2 Perry Ln' '20983' 0 1
2 'Elaine' 'Brown' '5 Park Ave' '34785' 1 0
3 'John' 'Smith' '1 May St' '10001' 0 1
Я хочу сгруппировать строки с аналогичной информацией об имени и адресе, а затем объединить столбцы 'source' с помощью функции max()
.Мой код выглядит следующим образом:
In [43]: grouped = df.groupby(['Firstname', 'Lastname', 'Address', 'Zip5'], as_index = False, sort = False)
In [44]: grouped.max()
Out[44]:
Firstname Lastname Address Zip5 Source_A Source_B
0 'John' 'Smith' '1 May St' '10001' 1 1
1 'Lou' 'Brown' '2 Perry Ln' '20983' 0 1
2 'Elaine' 'Brown' '5 Park Ave' '34785' 1 0
Этот вывод - именно то, что я хочу - по сути, строки дедуплицируются на ['Firstname', 'Lastname', 'Address', 'Zip5']
, при этом Source_A
и Source_B
принимают максимальные значения из оригиналаdataframe.
Однако, хотя это работает и для меньших DataFrames, код не завершает работу с очень большими наборами данных (строки 1,5 мм).Я запустил этот код в большом наборе данных около 45 минут назад, и он еще не закончен.Есть ли более эффективный способ сделать это?Мне также любопытно, почему простая идентификация дубликатов с помощью df.duplicated(['Firstname', 'Lastname', 'Address', 'Zip5'], keep = 'last')
работает очень быстро, тогда как groupby
борется.