Предположим, у вас есть фрейм данных (см. Данные ниже) с пространственным местоположением (долгота, широта, номер этажа) случайных людей. Что бы вы сделали, чтобы назначить каждого человека в одну (и только одну) группу в зависимости от того, где этот человек живет.
Требования:
- Каждая группа подходит только для 3 человек. Фрейм данных всегда кратен 9 людям (например, 18 или 27 человек соответствуют 6 или 9 группам)
- Люди в одной группе НЕ имеют одинаковые местоположения с точки зрения широты, долготы и пола
- Однако вы хотите объединить людей, которые не живут слишком далеко.
Нет строгого определения последнего требования. Вы просто хотите объединить людей, которые живут достаточно близко друг к другу.
Вы хотите, чтобы конечный результат (группа, в которой был выбран этот человек) был записан в новом столбце.
Как бы вы это сделали?
Это кадр данных:
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