【问题标题】:Python Pandas aggregate count and max value [duplicate]Python Pandas聚合计数和最大值[重复]
【发布时间】:2021-02-11 19:58:25
【问题描述】:

给定的数据帧包含一个主机、一个 ip 地址和该 ip 请求该主机的时间戳。

import pandas as pd

data = {
    'host': [
        'google.com',
        'yahoo.com',
        'wikipedia.org',
        'stackoverflow.com',
        'amazon.com',
        'google.com',
        'yahoo.com',
        'wikipedia.org',
        'wikipedia.org',
        'stackoverflow.com',
        'amazon.com',
        'google.com'
    ],
    'ip': [
        '192.168.1.1',
        '192.168.1.1',
        '192.168.1.1',
        '192.168.1.2',
        '192.168.1.2',
        '192.168.1.1',
        '192.168.1.2',
        '192.168.1.1',
        '192.168.1.2',
        '192.168.1.1',
        '192.168.1.2',
        '192.168.1.1',
    ],
    'ts': [
        1603968729,
        1603968829,
        1603968889,
        1603968529,
        1603968810,
        1603968564,
        1603968443,
        1603968765,
        1603968811,
        1603968278,
        1603968149,
        1603968001
    ]
}

df = pd.DataFrame(data, columns = ['host', 'ip', 'ts'])

现在我可以对 df 进行分组以计算每个主机的唯一 IP 地址

x = df.groupby(['host','ip'])['ip'].count()

host               ip         
amazon.com         192.168.1.2    2
google.com         192.168.1.1    3
stackoverflow.com  192.168.1.1    1
                   192.168.1.2    1
wikipedia.org      192.168.1.1    2
                   192.168.1.2    1
yahoo.com          192.168.1.1    1
                   192.168.1.2    1

而且我知道如何获取唯一 ip 的最新时间戳

y = df.groupby(['host','ip'])['ts'].max()

amazon.com         192.168.1.2    1603968810
google.com         192.168.1.1    1603968729
stackoverflow.com  192.168.1.1    1603968278
                   192.168.1.2    1603968529
wikipedia.org      192.168.1.1    1603968889
                   192.168.1.2    1603968811
yahoo.com          192.168.1.1    1603968829
                   192.168.1.2    1603968443

但我真正想要的是最新的时间戳和每个 ip 的计数。如下表:

amazon.com         192.168.1.2    1603968810    2
google.com         192.168.1.1    1603968729    3
stackoverflow.com  192.168.1.1    1603968278    1
                   192.168.1.2    1603968529    1
wikipedia.org      192.168.1.1    1603968889    2
                   192.168.1.2    1603968811    1
yahoo.com          192.168.1.1    1603968829    1
                   192.168.1.2    1603968443    1

请任何人提供缺少的步骤。

【问题讨论】:

  • 使用df = df.groupby(['host','ip'])['ts'].agg(['max','size'])
  • 尝试使用'-ts'

标签: python pandas aggregation


【解决方案1】:
df.groupby(by=['host', 'ip'])['ts'].agg(['max', 'count'])

您按两个属性分组,并使用agg 调用多个聚合函数。

【讨论】:

  • 那是我缺少的部分。使用 agg 和传递两个函数。它就像一个魅力。
猜你喜欢
  • 2021-03-01
  • 2021-08-16
  • 2020-03-07
  • 2017-07-07
  • 1970-01-01
  • 2021-10-01
  • 2019-03-28
  • 2019-09-18
  • 2017-12-25
相关资源
最近更新 更多