python - 添加一列,其中包含来自另一个数据框的 ID 列表
问题描述
问题
我想groupby
对数据框执行 a ,生成的数据框包含一个列,其元素是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
在列表中查看。显然,我可以先做一个groupby:
ship_cluster[["latitude", "longitude", cluster"]].groupby("cluster").mean()
但我不知道下一步,也没有简化的方法。有什么帮助吗?
解决方案
我相信需要,如果需要聚合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]
推荐阅读
- json - 禁用预定义文件名 - JSON 模式关联
- android - 原因:必须包含 Drive.SCOPE_APPFOLDER 才能使用快照
- r - 如何计算可以由 R 中的其他列分组的值
- windows - 如何将额外的路径添加到运行框(Win + R)
- google-api - 我的应用程序/服务器是否可以代表 2 人创建 Google 日历活动,以便他们通过 Google Meets 链接私下会面?
- javascript - EJS循环时的Javascript DOM操作
- reactjs - reactjs中的kendo-react-dropdowns multiselect没有重新绑定新的状态值
- swift - 如果电子邮件和密码在 firebase swift 中无效,如何显示错误消息?
- php - 从特定 Woocommerce 产品类别小部件中删除类别及其子类别
- python - 使用 xlsxWriter 的 SQL 查询的 Python 样式结果