2014-11-05 1 views
0

인덱스가 "transmitted""received" 인 무선 채널의 패킷 로그를 기반으로 DataFrame을 시작한 이후 각각의 부동 시간입니다.Python (팬더) : 주어진 시간에 값 사이의 레코드 개수 (비행 중 패킷)

언제든지 얼마나 많은 패킷이 공중에 분포하는지 알고 싶습니다. 내가

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

이것은 계산 불쾌한에 의해 순간에이 작업을 수행 (~ 각 반복에 대한 40 대)하지만 난 내 제한 팬더 경험이 더 좋은 방법을 일할 수 없었다.

누구나이를 달성하기위한 '더 좋은'방법에 대한 아이디어가 있습니까?

답변

1

기본적으로 데이터를 병합하고 그 중에 timeseries를 만들고 싶습니다.

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() 

실제 시간을 알아내는 것은 쉽습니다. 당신은 또한 그것을 명확하게하기 위해 재 샘플링 할 수 있지만, 그렇게해야합니다.


편집 : 그러나 거의 완벽 3MS/반복 ... 놀라운 덕분에 내가 분명하지 않다 아래 수레에서 해당 인덱스를 quantise하는 방법을

#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 : 초 다시 샘플링하는 방법을 추가 int (즉, 0과 1 초 사이의 얼마나 많은 패킷이 공중에 있었는지, 1-2, 2-3 등). 그래도 질문에 분명히 그 요구 사항을 명확하게하지 않았다. – Bolster

+1

나는 그것을 분 안에 답에 추가 할 것이다. – acushner