2014-09-21 6 views
0

을 위해 내가 Dataframe팬더 - 선택 행 행 [전] 행 [J]에있는 경우 Dataframe

id B C D 
1 1 1 [1,2,3] 
2 2 1 [1,2,3] 
3 0 1 [1,2,3] 
4 1 1 [0,1] 
5 2 1 [0,1] 

각 행의 열 D 다음 한이 목록입니다. 새로운 데이터 프레임을 형성하기 위해 행을 선택하여 모든 행이 B in D = True을 만족하도록하려면 어떻게해야합니까?

id B C D 
1 1 1 [1,2,3] 
2 2 1 [1,2,3] 
4 1 1 [0,1] 

내가 df[df['B'] in df['D']]로했는데, 그것은 나에게 오류를 제공합니다 :

예를 들어, 위 안양의 결과가 될 것입니다 TypeError: 'Series' objects are mutable, thus they cannot be hashed을.

당신은 슬라이싱을 수행하는 각 행이 조건을 만족 여부를 확인하고 그 결과 부울 시리즈를 사용하는 apply을 사용할 수 있습니다
+0

혼란을 피하고 사람들의 시간을 낭비하지 않으려면 질문에 대한 완전하고 정확한 요구 사항을 게시해야합니다. – EdChum

+0

@EdChum 예. 대답을 고맙게 생각하고 혼란에 빠져서 죄송합니다. 다음에 더 조심해. – Yulong

답변

2

:

import pandas as pd 
df = pd.DataFrame({'id':[1,2,3,4,5], 'B':[1,2,0,1,2], 'C' : [1,1,1,1,1], 'D':[[1,2,3], [1,2,3], [1,2,3], [0,1],[0,1]]}) 
print df[df.apply(lambda x: x['B'] in x['D'], axis=1)] 

출력 :

B C   D id 
0 1 1 [1, 2, 3] 1 
1 2 1 [1, 2, 3] 2 
3 1 1  [0, 1] 4 

이는 가정을 기반으로 행 D이 행간에 동일하지 않다는 것; 그렇지 않으면 isin을 기반으로하는 솔루션이 더 효율적이므로 선호해야합니다.

+0

감사합니다! 'apply'가 트릭을합니다. – Yulong