2014-11-05 9 views
0

我有一個基於來自無線信道的數據包日誌的數據幀,該數據幀的索引"transmitted""received"分別是自啓動以來的時間漂移​​。Python(Pandas):給定時間值之間的記錄數(在飛行中的數據包)

我想隨時分配有多少包在空中。我通過

t_packets = pd.Series([df[(df.transmitted < t) & (t < df.received)].count().max() for t in range(tmax)]) 

這是一個計算討厭這樣做的那一刻(〜每次迭代40歲),但我一直沒能以一種更好的方式與我有限的經驗大熊貓工作了。

任何人都有一個'更好'的方法來實現這個想法?

回答

1

基本上,我認爲你想壓扁數據並創建一個時間序列。

tx = pd.DataFrame(index=df.transmitted) 
rx = pd.DataFrame(index=df.received) 
tx['p'] = 1 #adding a packet 
rx['p'] = -1 #receiving a packet 

#create the time series here 
t = pd.concat([tx, rx]) 
t.sort().cumsum() 

從這裏可以很容易地計算出實際時間。你也可以重新採樣以使其更清晰,但這應該做到這一點。


編輯:將如何秒重新取樣:

#assuming that indexed times are in seconds 
t.sort(inplace=True) 
t.index = pd.to_datetime(t.index * 10e9) #to convert from nanoseconds to seconds 
t.resample('s', how='sum').cumsum() 
+1

Aaaaaand下降到3毫秒/迭代...驚人的,由於這是近乎完美但我不清楚如何quantise從漂浮在指數(即'0到1秒,1-2,2-3等空中有多少個數據包)。儘管這個問題並沒有真正提出這個要求。 – Bolster 2014-11-05 17:10:36

+1

我會在一分鐘內將其添加到答案中。 – acushner 2014-11-05 17:35:04

相關問題