我有一个df如下。假设df被时间戳索引为dtype='datetime64[ns]'
,即1970-01-01 00:00:27.603046999
。我在这里贴假时间戳。你知道吗
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
现在我尝试用简单的方式做两件事(可能在Panda中使用pd.Grouper
和pd.Groupby
函数)。你知道吗
我想按1个持续时间的固定bin对行进行分组(使用时间戳值)。然后在每个1秒的箱子中,仅当“Type”=A时,为每个“address”找到“Time_delta”的平均值和总和。
我想按1个持续时间的固定bin对行进行分组(使用时间戳值)。然后在每个箱子中,针对每个“地址”,找到到达时间的平均值和总和*。
IAT = Arrival Time (i) - Arrival Time (i-1)
注:如果时间戳持续时间/长度为100秒,那么输出数据帧中应该正好有100行,每个地址有6列,即2(平均值,总和)。你知道吗
For Problem 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)
结果如下:
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
如您所见,它给出了1S bin中每个地址的平均时间δ,但我想添加第二个条件,即仅当Type=A时才找到每个地址的平均值。我希望问题1现在已经清楚了。你知道吗
For Problem 2: Its a bit complicated. I want to do get Mean IAT for each address in the same format (See below):
一种可能的方法是在原始df中添加一个额外的列作为df['IAT'],其中
for in range (1, len(df))
i = 0
df['IAT'] = df['Arrival_Time'][i] - df['Arrival_Time'][i-1] i =
i=i+1
如果类型=A,则应用上述代码查找每个地址的IAT平均值
Actual Data
Timestamp Address Type Time Delta Arrival Time
1970-01-01 00:00:00.000000000 28:5a:ec:16:00:22 Control frame 0.000000 Nov 10, 2017 22:39:20.538561000
1970-01-01 00:00:00.000287000 28:5a:ec:16:00:23 Data frame 0.000287 Nov 10, 2017 22:39:20.548121000
1970-01-01 00:00:00.000896000 28:5a:ec:16:00:22 Control frame 0.000609 Nov 10, 2017 22:39:20.611256000
1970-01-01 00:00:00.001388000 28:5a:ec:16:00:21 Data frame 0.000492 Nov 10, 2017 22:39:20.321745000
... ...
目前没有回答
相关问题 更多 >
编程相关推荐