Определите повторяющиеся строки с помощью pandas и преобразуйте такие строки в одну строку, создав в результате новые столбцы - PullRequest
1 голос
/ 29 мая 2020

У меня есть набор данных станций

    map_id  longitude   latitude  zip_code
0   40830 -87.669147  41.857908     60608
1   40830 -87.669147  41.857908     60608
2   40120 -87.680622  41.829353     60609
3   40120 -87.680622  41.829353     60609
4   41120 -87.625826  41.831677     60616

Как видите, первые четыре строки дублируются, и это не случайно. Это одни и те же станции, которые рассматриваются как отдельные станции разных линий.

Я бы хотел исключить такие дубли (для некоторых станций это может быть 2 или даже 5 строк) и рассматривать это как одну станцию.

Более того, я хотел бы создать новый столбец «Hub», в котором агрегированные строки будут обрабатываться узловой станцией. Например, как логическое (0 для обычной станции, 1 для концентратора).

Желаемый результат для приведенного выше примера с двумя случаями дублирования -> преобразован в 3 строки с 2 концентраторами.

    map_id  longitude   latitude  zip_code    hub
0   40830 -87.669147  41.857908     60608      1
1   40120 -87.680622  41.829353     60609      1
1   41120 -87.625826  41.831677     60616      0

Я ценю любые советы!

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Похоже, вы хотите удалить дубликаты и назначить определенные почтовые индексы в качестве концентратора. Если это так, я бы отбросил дубликаты и использовал np.where для назначения концентраторов. Я включил несуществующий код операции, чтобы продемонстрировать, как это можно сделать, если в качестве концентратора указано несколько почтовых индексов

import numpy as np



df2=df.drop_duplicates(subset=['map_id','longitude','latitude','zip_code'], keep='first')
conditions=df2['zip_code'].isin(['60616','60619'])
df2['hub']=np.where(conditions,0,1)

enter image description here

1 голос
/ 29 мая 2020
df = df.groupby(['map_id','longitude','latitude','zip_code']).size().reset_index(name='hub')

df['hub'] = df['hub'].replace(1,0).apply(lambda x:min(x,1))

Вывод

   map_id  longitude   latitude  zip_code  hub
0   40120 -87.680622  41.829353     60609    1
1   40830 -87.669147  41.857908     60608    1
2   41120 -87.625826  41.831677     60616    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...