Как группировать людей, которые живут близко друг к другу, в pandas данных? - PullRequest
0 голосов
/ 29 марта 2020

Предположим, у вас есть фрейм данных (см. Данные ниже) с пространственным местоположением (долгота, широта, номер этажа) случайных людей. Что бы вы сделали, чтобы назначить каждого человека в одну (и только одну) группу в зависимости от того, где этот человек живет.

Требования:

  1. Каждая группа подходит только для 3 человек. Фрейм данных всегда кратен 9 людям (например, 18 или 27 человек соответствуют 6 или 9 группам)
  2. Люди в одной группе НЕ имеют одинаковые местоположения с точки зрения широты, долготы и пола
  3. Однако вы хотите объединить людей, которые не живут слишком далеко.

Нет строгого определения последнего требования. Вы просто хотите объединить людей, которые живут достаточно близко друг к другу.

Вы хотите, чтобы конечный результат (группа, в которой был выбран этот человек) был записан в новом столбце.

Как бы вы это сделали?

Это кадр данных:

array_data=([[ 50.56419  ,   8.67667  ,   2.       , 160.       ],
   [ 50.5740356,   8.6718179,   1.       ,   5.       ],
   [ 50.5746321,   8.6831284,   3.       , 202.       ],
   [ 50.5747453,   8.6765588,   4.       , 119.       ],
   [ 50.5748992,   8.6611471,   2.       , 260.       ],
   [ 50.5748992,   8.6611471,   3.       , 102.       ],
   [ 50.575    ,   8.65985  ,   2.       , 267.       ],
   [ 50.5751   ,   8.66027  ,   2.       ,   7.       ],
   [ 50.5751   ,   8.66027  ,   2.       ,  56.       ],
   [ 50.57536  ,   8.67741  ,   1.       , 194.       ],
   [ 50.57536  ,   8.67741  ,   1.       , 282.       ],
   [ 50.5755255,   8.6884584,   0.       , 276.       ],
   [ 50.5755273,   8.674282 ,   3.       , 167.       ],
   [ 50.57553  ,   8.6826   ,   2.       , 273.       ],
   [ 50.5755973,   8.6847492,   0.       , 168.       ],
   [ 50.5756757,   8.6846139,   4.       , 255.       ],
   [ 50.57572  ,   8.65965  ,   0.       ,  66.       ],
   [ 50.57591  ,   8.68175  ,   1.       , 187.       ]])

all_persons = pd.DataFrame(data=array_data) # convert back to dataframe

all_persons.rename(columns={0: 'latitude', 1: 'longitude', 2:'floor', 3:'id'}, inplace=True) # rename columns

...