Python 使用Pandas选择、切片和聚合时间数据

Python 使用Pandas选择、切片和聚合时间数据,python,pandas,time-series,Python,Pandas,Time Series,我正试图用熊猫来处理时态数据,我很难。。。 以下是数据帧的示例: index ip app dev os channel click_time 0 29540 3 1 42 489 2017-11-08 03:57:46 1 26777 11 1 25 319 2017-11-09 11:02:14 2 1409

我正试图用熊猫来处理时态数据,我很难。。。 以下是数据帧的示例:

index     ip    app     dev os    channel    click_time
0       29540    3       1  42      489  2017-11-08 03:57:46              
1       26777   11       1  25      319  2017-11-09 11:02:14              
2      140926   12       1  13      140  2017-11-07 04:36:14              
3       69375    2       1  19      377  2017-11-09 13:17:20              
4      119166    9       2  15      445  2017-11-07 12:11:37              
这是一个点击预测问题,因此我想创建一个时间窗口,聚合特定ip的过去行为(对于给定ip,过去4小时、8小时内有多少次点击?)

我尝试创建一个新的专栏,简单地说:

df['minus_8']=df['click_time']-timedelta(hours=8)
我想使用它,这样对于每一行,我都有一个特定的8小时窗口来聚合数据

我也尝试过重新采样,但收效甚微,比如说,我对函数的理解不是最优的


有人能帮忙吗?

如果您只需要选择一个特定的8小时,您可以按如下操作:

start_time = datetime.datetime(2017, 11, 9,11, 2, 14)
df[(df['click_time' >= start_time)
   & (df['click_time'] <= start_time+datetime.timedelta(0, 60*60*8))]
start_time=datetime.datetime(2017,11,9,11,2,14)
df[(df[‘单击时间’>=开始时间)

&(df['click_time']使用Martin给出的部分解决方案,我能够创建输出我想要的内容的函数:

def window_filter_clicks(df, h):
    df['nb_clicks_{}h'.format(h)]=0
    ip_array = df.ip.unique()
    for ip in ip_array:
        df_ip=df[df['ip']==ip]
        for row, i in zip(df_ip['click_time'],df_ip['click_time'].index):
            df_window    = df_ip[(df_ip['click_time']>= row-timedelta(hours=h)) & (df_ip['click_time']<= row) ]
            nb_clicks_4h = len(df_window)
            df['nb_clicks_{}h'.format(h)].iloc[i]= nb_clicks_4h
return df
def窗口过滤器点击(df,h):
df['nb_单击{}h'。格式(h)]=0
ip_数组=df.ip.unique()
对于ip_阵列中的ip:
df_ip=df[df['ip']==ip]
对于行,zip中的i(df_ip['click_time'],df_ip['click_time'])。索引):

df_window=df_ip[(df_ip['click_time']>=行时间增量(小时=h))&(df_ip['click_time']是否尝试
df.set_index('click_time')。重新采样('8H')。计数()
?我有,这确实有效,但这并不完全是我在这里要做的。通过这一点,我可以得到整个df的结果,而不考虑ip和其他一切。我想创建一个新的列df['clicks_in_last_8h']对于每一行。我要求您添加此数据集的预期输出,因为就目前情况而言,我真的无法理解您的问题:/您是对的,我应该重新措辞…作为输入,我将从我的df中获取一行,作为输出,该行对应的ip在过去8小时内登录的次数。为此,我假设我需要创建某种类型的回溯窗口,并选择该窗口中的相关数据,然后对其进行聚合,但这正是我现在无法做到的。此解决方案会出现两个问题:-启动时间未设置,因为它取决于用户连接的时间。-因为重采样将整个批次划分为8个小时的区块,所以会这样做这不符合我的需要