2014-09-15 6 views
2

입력 목록을 기반으로 DataFrame을 다듬 으려하지만 목록의 항목이 프레임의 일부 열에 있는지 확인해야합니다.목록의 값을 기준으로 팬더 데이터 프레임 자르기

UID   S1   S2 ElementHID n1 n2 n3 n4 
    0 88.340153 -88.340153   144 1 4 5 5 
    1 66.370153 -66.370153   144 4 1 5 4 
    2 74.422513 -74.422513   144 2 7 3 6 
    3 22.324573 -22.324573   144 1 9 8 1 
    4 14.322413 -14.322413   144 3 4 6 3 

각 행은 최대 4 개 개의 노드를 가질 수있는 요소를 나타냅니다 :

이 같은 외모를 정돈하고 싶은 프레임 (데이터는 아래 랜덤).

다른 프레임에서 필터링 한 노드 목록 (node_list)이 있는데 여기에 와서 해당 요소를 터치하는 노드가 있습니다 (노드가 n1, n2, n3, n4 일 수 있음) . 한 노드에서 여러 요소가 결합 될 수 있으므로 'n'열에는 반복되는 데이터가 있습니다.

전체 프레임 반복을 피하고 싶습니다. 나는 그것을 시도했지만 너무 길어졌다. 나는 이것이 팬더를 통해 할 수 있기를 바라고 있습니다.

행 당 기본 논리와 같은 것 [행의 경우 N1 또는 N2 또는 N3 또는 N4의 노드] 노드가

은 지금까지 개별적으로 컬럼을 통과 시도한 node_list에 통해 반복되는 경우, 만 frame_list의 모든 내용을 병합 한 후 열을 곧바로 유지할 수는 없습니다.

frame_list = [] 
for n in range(1, 4): 
    node = 'n' + str(n) 
    if node in element_frame.columns: 
     temp_frame = element_frame.merge(pd.DataFrame(node_list), left_on = node, right_on='uid', how = 'inner') 
     frame_list.append(temp_frame) 
    else: 
     continue 

더 쉬운 방법이 있기를 바랍니다.

감사합니다,

경희대

답변

2

당신과 같이 할 수 있습니다 :

>>> i = element_frame[['n1', 'n2', 'n3', 'n4']].isin(node_list).any(axis=1) 

하고, i는 부울 인덱서 것 :

>>> element_frame[i] 
+0

아 완벽! 고맙습니다. – khu

관련 문제