2013-06-13 147 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開始?正如我所說的, –