【问题标题】:Python group by find duplicate addressesPython group by 查找重复地址
【发布时间】:2021-10-30 02:59:51
【问题描述】:

您好,我有一个数据框,其中包含 日期、IP 地址用户名 列。 我想按数据框进行分组,以查找具有多个用户的 IP 地址。 我想要类似的东西: IP 地址 用户名 样本 1 用户 1 用户2 示例 2 用户 3 用户4

我正在使用代码:

group=dict(df.groupby(by=['IP address','Date'])['Username'].count())
ips=list()
for k,v in group.items():
    if v>=2:
        ips.append(k)
ip_address=list()
for x  in ips:
    ip_address.append(x[0])
ip_address
ips=log_cumulative2[log_cumulative2['IP address'].isin(ip_address)]

当我将 df 导出到电子表格中时,我也只需一个用户即可获得 IPS。有什么帮助吗?

【问题讨论】:

标签: python pandas duplicates pandas-groupby


【解决方案1】:

你可以做的是使用agg 方法。在这种方法中,您可以传递一个字典,指示应该对每一列执行什么操作。使用agg 方法,您可以为每一列使用多种聚合方法:

result = df.groupby(['IP address','Date']).agg({
    'Username':['count',list],
    'ips':list })
# removing the unique ones
result = result[result['Username','count'] >=2]

此代码创建一个数据框,其中包含 IP addressDate 的每对唯一对的计数作为其索引。然后它有一个Usernames 的列表。如果要删除重复的Usernames,可以使用set 函数。 它还有一个ips 列表。

【讨论】:

  • 其实很好,但是有没有办法选择count大于或等于2的?为了找到超过2个用户的ips。
  • 您可以过滤用户名的计数。我会将其添加到答案中。
  • @GeorgePapadopoulos 只需确保您使用的是正确的列索引。由于会生成多级列索引,所以可能和你习惯的有点不一样。
猜你喜欢
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 2022-11-18
  • 2013-09-20
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多