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

Python用pandas groupby查找多用户IP结果包含单用户IP求助

问题原因

  • 你当前的统计逻辑和需求不匹配,是导致结果错误的核心原因:
    1. 你按IP地址+日期分组后用count()统计的是用户名的记录条数,同一个用户同一天多次登录也会被计数≥2,此时你会误将这类仅关联单个用户的IP纳入筛选范围
    2. 你的需求是查找关联多个不同用户名的IP,原有逻辑完全没有对用户名去重,也没有按IP维度做全局的用户名数量统计

正确实现代码

场景1:直接输出「IP-对应关联用户名列表」的结果

# 按IP分组,同时统计去重用户名数量、收集所有去重后的用户名
ip_user_mapping = df.groupby('IP address')['Username'].agg(
    关联用户数='nunique',
    关联用户名列表=lambda x: list(x.unique())
).reset_index()
# 筛选出关联≥2个不同用户的IP
result = ip_user_mapping[ip_user_mapping['关联用户数'] >= 2]
# 可直接导出结果
result.to_excel('多用户关联IP清单.xlsx', index=False)

场景2:需要保留符合条件的IP对应的所有原始日志记录

在上述代码基础上追加以下逻辑即可:

# 提取符合条件的IP列表
target_ips = result['IP address'].tolist()
# 从原始DataFrame中筛选对应IP的全量记录
filtered_logs = df[df['IP address'].isin(target_ips)]
# 导出原始日志
filtered_logs.to_excel('多用户关联IP全量日志.xlsx', index=False)

特殊场景适配

如果你的实际需求是「查找同一天内出现多个不同用户名的IP」,调整分组逻辑即可:

# 按IP+日期分组,统计单日去重用户名数量
ip_date_stat = df.groupby(['IP address', 'Date'])['Username'].nunique().reset_index(name='当日关联用户数')
# 筛选单日关联≥2个用户的IP并去重
target_ips = ip_date_stat[ip_date_stat['当日关联用户数'] >= 2]['IP address'].unique().tolist()
# 后续筛选原始数据的逻辑和上面一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:09:03