2013-06-13 2 views
2

У меня есть набор данных похожи на следующий файл сResampling с пандами

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 минут слотов? После код просто распечатает все IP-адреса между '06: 00: 00 'и '06: 20: 00.

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

Что ваши df_s выглядеть? Я не думаю, что могу воспроизвести его с помощью pandas 0.11. Мой слот 6:00 содержит три удара и мой слот 6:20 1. Попробовали ли вы установить ключевые слова 'closed =' и 'label ='? Определение контейнеров по умолчанию может отличаться от того, что вы ожидаете. –

+0

@ Rutger Kassies Как насчет этого? Но я должен указать временной интервал? new = DataFrame (df ['IP']. между_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

Спасибо, но придется ждать :)! До тех пор я хочу получать IP-адреса за каждые 20-минутные интервалы? Не могли бы вы предложить мне способ? –

+0

@ Метод AndyHayden ниже будет работать, или есть что-то еще, что вам нужно? – Jeff

+0

df1.IP.between_time ('06: 00: 00 ', '06: 20: 00') Эта часть, я хочу получить автоматически, я имею в виду, чтобы печатать IP-адреса для каждых 2-минутных интервалов, смотрящих с 06:00:00? –

 Смежные вопросы

  • Нет связанных вопросов^_^