如何在Pandas中获取DataFrame中重复次数最多的经纬度对
获取Pandas中重复次数最多的经纬度对
你现在遇到的问题是,groupby后得到的Series里,直接取第一个元素只能拿到重复次数,但想要对应的经纬度值对吧?其实很简单——因为这个Series的索引就是你分组的经纬度对,直接访问索引就能拿到啦!
直接获取的解决方案
先看最简洁的代码:
# 先得到按重复次数降序排列的结果 count_series = coords.groupby(['longs','lats']).size().sort_values(ascending=False) # 取出重复次数最多的经纬度对 top_long, top_lat = count_series.index[0] # 输出结果 print(f"重复次数最多的经纬度:\n经度(longs):{top_long}\n纬度(lats):{top_lat}\n重复次数:{count_series.iloc[0]}")
为什么这样能行?
你执行groupby(['longs','lats']).size()后,得到的是一个多级索引(MultiIndex)的Series:
- 索引部分:每一组都是
(longs值, lats值)的元组,对应你分组的经纬度对 - 值部分:就是该经纬度对的重复次数
所以count_series.index[0]会直接返回第一个(也就是重复次数最高的)经纬度元组,把它解构到top_long和top_lat里,就能拿到你要的具体数值了。
要是想整理成DataFrame格式怎么办?
如果后续需要更方便的操作,也可以把结果转成DataFrame:
# 转成DataFrame并重命名计数列 count_df = count_series.reset_index().rename(columns={0: 'repeat_count'}) # 取第一行的经纬度和次数 top_record = count_df.iloc[0] print(f"经度:{top_record['longs']}\n纬度:{top_record['lats']}\n重复次数:{top_record['repeat_count']}")
用你给出的示例数据,执行后会得到:
重复次数最多的经纬度: 经度(longs):43.345661 纬度(lats):-8.422813 重复次数:303
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

