问题
我想在数据框上执行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()
但我不知道下一步,也不知道简化方法。有什么帮助吗?
答案 0 :(得分:1)
我认为如果需要按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]