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

Pandas按经纬度分组获取street_type最高频值及对应计数

问题原因排查

你统计结果异常的核心原因是示例代码中构造street_type字段时错误使用了集合{}定义,Python集合会自动去重,导致原本2条rectilinear记录仅保留1条,最终统计计数错误。

独热编码方案合理性说明

你使用get_dummies转独热编码再分组求和的思路是可行的,但不是最优方案:不需要额外做编码转换,直接通过自定义聚合函数就能一步拿到你需要的最高频类型、对应计数和坐标信息,代码更简洁易维护。

正确实现代码

步骤1:修正数据构造逻辑

import pandas as pd

# street_type用列表[]定义,避免集合去重
data = {
    'Latitude': [-41.794,-41.733,-41.335,-41.794],
    'Longitude': [-12.344,-12.456,-12.929,-12.344],
    'street_type': ['rectilinear','roundabout','intersection','rectilinear']
}
df = pd.DataFrame(data)

方案1:沿用独热编码思路修正后实现

# 生成独热编码
df_dummy = pd.get_dummies(df, columns=['street_type'])
# 分组求和
df_grouped = df_dummy.groupby(['Latitude','Longitude'], as_index=False).sum()
# 取每行最大值对应的列名和数值即为最高频类型和计数

方案2:更简洁的自定义聚合实现(推荐)

不需要额外做编码转换,直接分组统计即可得到目标结果:

def calc_top_type(group):
    type_count = group.value_counts()
    # 取最高频类型和对应计数
    return pd.Series([type_count.index[0], type_count.iloc[0]], 
                     index=['top_street_type', 'appear_count'])

result = df.groupby(['Latitude','Longitude'], as_index=False)['street_type'].apply(calc_top_type)

输出结果示例

LatitudeLongitudetop_street_typeappear_count
-41.794-12.344rectilinear2
-41.733-12.456roundabout1
-41.335-12.929intersection1

特殊情况处理

如果分组内存在多个频次相同的最高频类型,可以自行调整calc_top_type函数逻辑,比如返回所有并列类型,或者按自定义规则取优先级更高的类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:06:03