Добавить столбец, содержащий список идентификаторов из другого кадра данных - PullRequest
0 голосов
/ 30 мая 2018

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

Пример
У меня есть кадр данных ship_cluster с ShipID, latitude, longitude и столбцом с именем cluster.

In [4]: df = pd.DataFrame({"ShipID": [7, 7, 8, 9],
                           "latitude": [51.872842, 51.872874, 51.872794, 51.872946],
                           "longitude": [5.810379, 5.810729, 5.810754, 5.810548],
                           "cluster": [0, 1, 0, 0]})
print(df)

"ShipID" latitude  longitude cluster
7        51.872842 5.810379  0
7        51.872874 5.810729  1
8        51.872794 5.810754  0
9        51.872946 5.810548  0

желаемый результат, который я хотел бы получить, был бы:

         latitude  longitude ShipID
cluster                            
0        51.872860 5.810560  [7, 8, 9]
1        51.872874 5.810729  [7]

Итак, по cluster, я бы хотел видеть ShipID в списке.Очевидно, что сначала я могу выполнить групповую работу:

ship_cluster[["latitude", "longitude", cluster"]].groupby("cluster").mean()

, но я не знаю ни следующего шага, ни упрощенного метода.Любая помощь?

1 Ответ

0 голосов
/ 30 мая 2018

Я считаю, что нужно, если нужно, агрегировать по cluster:

d = {"latitude":'mean', "longitude":'mean', "ShipID":lambda x: x.tolist()}
df = ship_cluster.groupby("cluster").agg(d)
print (df)
         latitude  longitude ShipID
cluster                            
0        51.87270    5.81362    [7]
1        51.85040    5.86688    [7]
2        51.87410    5.91493    [7]
3        51.85500    5.96898    [7]
4        51.88101    6.00426    [7]
5        51.87368    6.03096    [7]

или по ShipID:

d = {"latitude":'mean', "longitude":'mean', "cluster":lambda x: x.tolist()}
df = ship_cluster.groupby("ShipID").agg(d)
print (df)
         latitude  longitude             cluster
ShipID                                          
7       51.867815   5.933272  [0, 1, 2, 3, 4, 5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...