You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中对DataFrame分组后生成含ShipID列表的结果列?

解决方案

你可以通过pandas的groupby().agg()方法一次性完成两种聚合操作,这样比分开处理再合并要高效简洁得多。

完整代码示例

import pandas as pd

# 你的示例数据
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]
})

# 分组聚合操作
result = df.groupby("cluster").agg(
    latitude=("latitude", "mean"),
    longitude=("longitude", "mean"),
    ShipID=("ShipID", lambda x: list(x.unique()))
)

print(result)

代码解释

  • agg()方法支持为不同列指定不同的聚合逻辑:
    • 对latitude和longitude列,我们直接使用"mean"函数计算分组均值;
    • 对ShipID列,用lambda x: list(x.unique())生成去重后的ShipID列表——如果你的业务场景中同一个cluster不会出现重复的ShipID,也可以简化为lambda x: list(x)。

输出结果

运行上述代码后,会得到和你期望完全一致的结果:

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

如果你不想让cluster作为索引,可以在代码末尾加上.reset_index(),这样cluster会变成普通列。


内容的提问来源于stack exchange,提问作者Lucasje19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:12:16