Python 熊猫重采样

Python 熊猫重采样,python,pandas,ipython-notebook,Python,Pandas,Ipython Notebook,我有一个类似于以下文件的数据集 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等)之间)。我可以按

我有一个类似于以下文件的数据集

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')

第一个统计每个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.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

你的df_是什么样子的?我不认为我可以用pandas 0.11复制它。我的6:00插槽包含三个点击,我的6:20插槽1。你试过设置
closed=
label=
关键字吗?默认的箱子定义可能与你期望的不同。@Rutger Kassies这如何?但我必须指定时隙?new=DataFrame(df['IP'].between_time('06:00:00','06:20:00'))t=new.groupby('IP').size()谢谢Andy!'TimeGrouper'这对我很重要,但必须等待:)!在那之前,我想每20分钟获得一次IP?你能给我一个建议吗?@AndyHayden下面的方法会起作用,或者你还有其他的目标吗?df1.IP。在这段时间(“06:00:00”,“06:20:00”)之间,我想自动获得,我的意思是从06:00:00开始,每20分钟打印一次IP?