如何基于dia和momento字段统计各位置的用户数量?
解决按日期+时段统计位置用户数的问题
你可以直接利用Pandas的groupby功能实现需求,不需要嵌套循环,代码简洁且高效:
核心思路
按**日期(dia)、时段(momento)、纬度(Latitude)、经度(Longitude)**四个维度分组,统计每组内的唯一用户数量(避免同一用户重复计数),最后转换为你需要的列表格式。
代码实现
假设你的DataFrame名为df,代码如下:
# 分组统计:按日期、时段、经纬度分组,计算每组唯一用户数 grouped_df = df.groupby(['dia', 'momento', 'Latitude', 'Longitude'])['nome'].nunique().reset_index(name='用户数') # 转换为[纬度, 经度, 用户数]的列表格式 result_list = grouped_df[['Latitude', 'Longitude', '用户数']].values.tolist() # (可选)如果需要保留日期和时段信息,可生成带时间维度的列表 # result_with_time = grouped_df[['dia', 'momento', 'Latitude', 'Longitude', '用户数']].values.tolist()
代码说明
groupby(['dia', 'momento', 'Latitude', 'Longitude']):确保我们在同一天的同一15分钟时段、同一地理位置下统计用户数,完全匹配你的需求场景。['nome'].nunique():统计每组内的唯一用户数量,对应示例中“DCF有2个用户(bruno和thiago)”的统计逻辑;如果你的需求是统计连接次数而非用户数,可替换为count()。reset_index(name='用户数'):将分组后的结果转换为普通DataFrame,并给统计列命名。values.tolist():将DataFrame的指定列转换为嵌套列表格式,符合你的输出要求。
为什么嵌套循环容易失败?
嵌套循环需要手动处理分组逻辑、去重判断等细节,不仅代码冗余,还容易出现日期/时段匹配错误、重复计数等问题,而Pandas的groupby是专门为这类分组统计场景设计的API,底层优化过效率,逻辑也更清晰。
内容的提问来源于stack exchange,提问作者Thiago Ramos
相关产品推荐
相关产品推荐

