2013-06-13 105 views
2

我有一个数据集类似于下面的文件重采样与熊猫

2013-05-30 06:00:41 173.199.116.171 
2013-05-30 06:05:41 61.245.172.14 
2013-05-30 06:10:42 74.86.158.106 
2013-05-30 06:20:42 61.245.172.14 

我想重新取样,20分钟,得到一定20分钟时隙中的命中次数(例如之间。(06.00.00 -06.20.00或06.40.00-07.00.00等)。我可以打印命中计数整个数据文件,如下所示。

ips = df.groupby('IP').size() 

如何获得各20个分钟时间段命中计数?继代码只是打印'06:00:00'和'06:20:00之间的所有IP地址“。

df_s = df['IP'].resample('20t', how='count') 
print df['IP'].between_time('06:00:00', '06:20:00') 
+0

什么是您的df_s样子?我不认为我可以用熊猫0.11复制它。我的6:00插槽包含三个匹配,而我的6:20插槽1.您是否尝试设置'closed ='和'label ='关键字?默认的箱子定义可能与你所期望的不同。 –

+0

@Rutger Kassies这个怎么样?但是我必须指定时间段?新= DataFrame(df ['IP']。between_time('06:00:00','06:20:00')) t = new.groupby('IP')。size() –

回答

1

第一计数所有从各20分钟时间段

In [11]: df1.IP.resample('20t', how='count') # I usually prefer '20min' 
Out[11]: 
datetime 
2013-05-30 06:00:00 3 
2013-05-30 06:20:00 1 
dtype: int64 

第二行抓住某些时间之间的那些行:

In [12]: df1.IP.between_time('06:00:00', '06:20:00') 
Out[12]: 
datetime 
2013-05-30 06:00:41 173.199.116.171 
2013-05-30 06:05:41  61.245.172.14 
2013-05-30 06:10:42  74.86.158.106 
Name: IP, dtype: object 

可以是纯溶液到一般问题(所以你不需要指定之间的时间)使用TimeGrouper,但这是我能做的最好的,打印所有的分组:

In [13]: tg = pd.TimeGrouper('20t') 

In [14]: g = df1.groupby(tg) 

In [15]: def f(x): 
      print x 
      return x 

In [16]: _ = g.apply(f)    # the '_ =' bit just suppresses ouput 
            IP 
datetime 
2013-05-30 06:00:41 173.199.116.171 
2013-05-30 06:05:41 61.245.172.14 
2013-05-30 06:10:42 74.86.158.106 
           IP 
datetime 
2013-05-30 06:20:42 61.245.172.14 
+0

谢谢Andy! 'TimeGrouper'这对我很重要 –

2

这在0.11.1提供了新的方法(即将很快),提供了一组过滤机制,得益于@DanAllen

In [49]: df 
Out[49]: 
            ip 
date_time       
2013-05-30 06:00:41 173.199.116.171 
2013-05-30 06:05:41 61.245.172.14 
2013-05-30 06:10:42 74.86.158.106 
2013-05-30 06:20:42 61.245.172.14 

In [50]: df.groupby(pd.TimeGrouper('20min')).filter(lambda x: x.between_time('06:00:00', '06:20:00')) 
Out[50]: 
            ip 
date_time       
2013-05-30 06:00:41 173.199.116.171 
2013-05-30 06:05:41 61.245.172.14 
2013-05-30 06:10:42 74.86.158.106 
+0

谢谢,但必须等待:)!在那之前,我希望每20分钟获得一个IP地址,你能否给我一个建议? –

+0

@AndyHayden下面的方法可以工作,或者你还有其他的东西吗? – Jeff

+0

df1.IP.between_time('06:00:00','06:20:00')这部分,我想自动获得,我的意思是打印从每个2o分钟插槽的IPs从06:00:00开始?正如我所说的, –