将行满足多个条件的固定持续时间窗口中的行

时间:2017-11-15 14:04:04

标签: python pandas dataframe

我的df如下。考虑df由时间戳索引为TimeDistributed(Dense),即dtype='datetime64[ns]'。我在这里添加虚拟时间戳。

1970-01-01 00:00:27.603046999
  • 我有三个独特的“地址”(1,2,3)。
  • 我有两个独特的“类型”(A,B)

现在我想以简单的方式做两件事(可能在Panda中使用Timestamp Address Type Arrival_Time Time_Delta 0.1 2 A 0.25 0.15 0.4 3 B 0.43 0.03 0.9 1 B 1.20 0.20 1.3 1 A 1.39 0.09 1.5 3 A 1.64 0.14 1.7 3 B 1.87 0.17 2.0 3 A 2.09 0.09 2.1 1 B 2.44 0.34 pd.Grouper函数。)

  1. 我想按1个持续时间的固定bin分组行(使用时间戳值)。然后在每1秒的bin中,对于每个“地址”,只有在“Type”= A时才能找到“Time_delta”的平均值和总和。

  2. 我想按1个持续时间的固定bin分组行(使用时间戳值)。然后在每个箱子中,为每个“地址”找到到达时间*的平均值和总和。

  3. pd.Groupby

    注意:如果时间戳持续时间/长度为100秒,我们在输出数据帧中应该只有100行,每个地址应该有6列,即两个(平均值,总和)。

      

    对于问题1:

    我尝试了以下代码:

    IAT = Arrival Time (i) - Arrival Time (i-1)

    给出了结果:

     df = pd.DataFrame({'Timestamp': Timestamp, 'Address': Address, 
                       'Type': Type, 'Arrival_Time': Arrival_time, 'Time_Delta': Time_delta})
    # Set index to Datetime
    index = pd.DatetimeIndex(df[df.columns[3]]*10**9) # Convert timestamp into format
    df = df.set_index(index) #  Set timestamp as index
    
    df_1 = df[df.columns[2]].groupby([pd.TimeGrouper('1S'), df['Address']]).mean().unstack(fill_value=0)
    

    如您所见,它为1S bin中的每个地址提供了平均Time_delta,但我想添加第二个条件,即仅在Type = A时找到每个地址的均值。我希望问题1现在清楚了。

      

    对于问题2:   它有点复杂。我想以相同的格式为每个地址获取Mean IAT(见下文):

    一种可能的方法是将原始df的额外列添加为df ['IAT'],其中

    Timestamp             1     2      3                          
    1970-01-01 00:00:00  0.20  0.15  0.030
    1970-01-01 00:00:01  0.09  0.00  0.155
    1970-01-01 00:00:02  0.34  0.00  0.090
    

    然后应用相同的上述代码,如果Type = A,则查找每个地址的IAT平均值。

      

    实际数据

    for in range (1, len(df))
        i = 0
        df['IAT'] = df['Arrival_Time'][i] - df['Arrival_Time'][i-1] i =
        i=i+1
    

0 个答案:

没有答案