pandas groupby 频率 5s
pandas groupby freq 5s
我加载了一个包含网络流量的 .csv,并将时间放在索引中。我按"ipdst proto and time".
组数
...
df['time'] = pd.to_datetime(df['time'])
df.index = df['time']
data = df.copy()
data_group = pd.DataFrame({'count': data.groupby(['ipdst', 'proto', data.index]).size()}).reset_index()
data_group
输出:
ipdst proto time count
10.3.20.102 HTTP 2017-03-20 17:08:56 1
10.3.20.102 HTTP 2017-03-20 17:08:57 1
10.3.20.102 HTTP 2017-03-20 17:08:58 1
10.3.20.102 HTTP 2017-03-20 17:08:58 1
10.3.20.102 TCP 2017-03-20 17:08:59 3
现在我想看看"ipdst"和"protocol"以5s的时间频率重复。喜欢下一个:
ipdst proto time count
- - 2017-03-20 17:08:50 0
10.3.20.102 HTTP 2017-03-20 17:08:55 4
10.3.20.102 TCP 2017-03-20 17:08:55 4
- - 2017-03-20 17:09:00 0
让我们使用 groupby
、resample
、sum
和 reset_index
:
df.groupby(['ipdst','proto']).resample('5S', on='time').sum().reset_index()
或(如果您使用的是 0.19.0 之前的旧 Pandas)
df.set_index('time').groupby(['ipdst','proto']).resample('5S').sum().reset_index()
输出:
ipdst proto time count
0 10.3.20.102 HTTP 2017-03-20 17:08:55 4
1 10.3.20.102 TCP 2017-03-20 17:08:55 3
或者您也可以按照文的建议使用pd.Grouper。 pd.TimeGrouper is deprecated.
df.groupby([df['ipdst'],df['proto'],pd.Grouper(key='time', freq='5s')])['count'].sum().reset_index()
我加载了一个包含网络流量的 .csv,并将时间放在索引中。我按"ipdst proto and time".
组数...
df['time'] = pd.to_datetime(df['time'])
df.index = df['time']
data = df.copy()
data_group = pd.DataFrame({'count': data.groupby(['ipdst', 'proto', data.index]).size()}).reset_index()
data_group
输出:
ipdst proto time count
10.3.20.102 HTTP 2017-03-20 17:08:56 1
10.3.20.102 HTTP 2017-03-20 17:08:57 1
10.3.20.102 HTTP 2017-03-20 17:08:58 1
10.3.20.102 HTTP 2017-03-20 17:08:58 1
10.3.20.102 TCP 2017-03-20 17:08:59 3
现在我想看看"ipdst"和"protocol"以5s的时间频率重复。喜欢下一个:
ipdst proto time count
- - 2017-03-20 17:08:50 0
10.3.20.102 HTTP 2017-03-20 17:08:55 4
10.3.20.102 TCP 2017-03-20 17:08:55 4
- - 2017-03-20 17:09:00 0
让我们使用 groupby
、resample
、sum
和 reset_index
:
df.groupby(['ipdst','proto']).resample('5S', on='time').sum().reset_index()
或(如果您使用的是 0.19.0 之前的旧 Pandas)
df.set_index('time').groupby(['ipdst','proto']).resample('5S').sum().reset_index()
输出:
ipdst proto time count
0 10.3.20.102 HTTP 2017-03-20 17:08:55 4
1 10.3.20.102 TCP 2017-03-20 17:08:55 3
或者您也可以按照文的建议使用pd.Grouper。 pd.TimeGrouper is deprecated.
df.groupby([df['ipdst'],df['proto'],pd.Grouper(key='time', freq='5s')])['count'].sum().reset_index()