如何在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
相关产品推荐
相关产品推荐

