2016-07-27 2 views
3

다음은 내 데이터 프레임의 단순화 된 모양입니다. 내가 처리 할팬더 및 데이터 처리에 일치하는 튜플

first.csv

,No.,Time,Source,Destination,Protocol,Length,Info,src_dst_pair 
325778,112.305107,02:e0,Broadcast,ARP,64,Who has 253.244.230.77? Tell 253.244.230.67,"('02:e0', 'Broadcast')" 
801130,261.868118,02:e0,Broadcast,ARP,64,Who has 253.244.230.156? Tell 253.244.230.67,"('02:e0', 'Broadcast')" 
700094,222.055094,02:e0,Broadcast,ARP,60,Who has 253.244.230.77? Tell 253.244.230.156,"('02:e0', 'Broadcast')" 
766542,766543,247.796156,100.118.138.150,41.177.26.176,TCP,66,32222 > http [SYN] Seq=0,"('100.118.138.150', '41.177.26.176')" 
767405,248.073313,100.118.138.150,41.177.26.176,TCP,64,32222 > http [ACK] Seq=1,"('100.118.138.150', '41.177.26.176')" 
767466,248.083268,100.118.138.150,41.177.26.176,HTTP,380,Continuation [Packet capture],"('100.118.138.150', '41.177.26.176')" 

나는 (마지막 요소)의 모든 고유 요소 src_dst_pair이

uniq_src_dst_pair = numpy.unique(data.src_dst_pair.ravel()) 
[('02:e0', 'Broadcast') ('100.118.138.150', '41.177.26.176')] 

나는 각

팬더에서 다음과 같은 작업을 수행 할 수 방법 요소가 uniq_src_dst_pair에 있으면 df.src_dst_pair를 확인하십시오. 이 일치하는 경우,

내 예상 된 결과 나는이 작업을 수행 할 수있는 방법

('02:e0', 'Broadcast') : 188 
('100.118.138.150', '41.177.26.176') : 510 

있는 별도의 열에 df.Length을 추가하고 저장?

다음은

import pandas 
import numpy 


data = pandas.read_csv('first.csv') 
print data 

uniq_src_dst_pair = numpy.unique(data.src_dst_pair.ravel()) 
print uniq_src_dst_pair 
print len(uniq_src_dst_pair) 

# following is hardcoded, but need to be more general for the above list 
match1 = data[data.src_dst_pair == "('02:e0:ed:0a:fb:5f', 'Broadcast')"] # doesn't work 
+0

을 그냥 명확하게 말하면 각 연결을 통해 전송 된 총 바이트 수를 얻으려고합니다 (연결은 소스와 대상으로 식별됩니다). –

+0

정확합니다. – user2532296

답변

2

CSV 파일이 엉망 내 시도이다. 머리글에 첫 번째 쉼표가 없어야하며 네 번째 비 머리말 행에 추가 필드가 있어야합니다. 당신이 사용할 수 있다는 고정 :

In [6]: data.groupby('src_dst_pair').Length.sum() 
Out[6]: 
src_dst_pair 
('02:e0', 'Broadcast')     188 
('100.118.138.150', '41.177.26.176') 510 
Name: Length, dtype: int64 

그러나, 최종 필드, 'src_dst_pair가'불필요이 당신이 간단하게 다음과 같이 할 수 있기 때문에 달성하기 위해 원한 경우 :

In [8]: data.groupby(['Source','Destination']).Length.sum() 
Out[8]: 
Source   Destination 
02:e0   Broadcast  188 
100.118.138.150 41.177.26.176 510 
Name: Length, dtype: int64 
+0

감사합니다. src_data_pair에는 몇 가지 다른 목표가 있습니다. 코드 단순화를 위해 여기에 표시하지 않았습니다. 그러나 귀하의 통찰력을 주셔서 감사합니다. – user2532296

관련 문제