我的df如下。考虑df由时间戳索引为TimeDistributed(Dense)
,即dtype='datetime64[ns]'
。我在这里添加虚拟时间戳。
1970-01-01 00:00:27.603046999
现在我想以简单的方式做两件事(可能在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个持续时间的固定bin分组行(使用时间戳值)。然后在每1秒的bin中,对于每个“地址”,只有在“Type”= A时才能找到“Time_delta”的平均值和总和。
我想按1个持续时间的固定bin分组行(使用时间戳值)。然后在每个箱子中,为每个“地址”找到到达时间*的平均值和总和。
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