Python Pandas 聚合计数和最大值
Python Pandas aggregate count and max value
给定的数据帧包含主机、IP 地址和 IP 请求该主机的时间戳。
import pandas as pd
data = {
'host': [
'google.com',
'yahoo.com',
'wikipedia.org',
'whosebug.com',
'amazon.com',
'google.com',
'yahoo.com',
'wikipedia.org',
'wikipedia.org',
'whosebug.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
whosebug.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
whosebug.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的计数。 table 喜欢:
amazon.com 192.168.1.2 1603968810 2
google.com 192.168.1.1 1603968729 3
whosebug.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.groupby(by=['host', 'ip'])['ts'].agg(['max', 'count'])
您按两个属性分组并使用 agg
.
调用多个聚合函数
给定的数据帧包含主机、IP 地址和 IP 请求该主机的时间戳。
import pandas as pd
data = {
'host': [
'google.com',
'yahoo.com',
'wikipedia.org',
'whosebug.com',
'amazon.com',
'google.com',
'yahoo.com',
'wikipedia.org',
'wikipedia.org',
'whosebug.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
whosebug.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
whosebug.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的计数。 table 喜欢:
amazon.com 192.168.1.2 1603968810 2
google.com 192.168.1.1 1603968729 3
whosebug.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.groupby(by=['host', 'ip'])['ts'].agg(['max', 'count'])
您按两个属性分组并使用 agg
.