2016-10-16 3 views
0

가 그러한 문제를 제거 제가 열에있는 행을 제거해야 DF1 행의 다음 예에서 0, 3, 제거되어야I 가지고 dataframe 고유 행

dataframe의 고유 값

 A  B  C 
0  5 100  5 
1  1 200  5 
2  1 150  4 
3  3 500  5 

나는까지 생각 한 솔루션은 지금은 다음과 같습니다

  1. GROUPBY (A) 각 그룹의
  2. 카운트 행
  3. 필터 아웃 카운트> 1
  4. DF2
  5. DF1.intersect (DF2)

다른 아이디어로 결과를 저장 하시겠습니까? RDD 솔루션도 도움이 될 수 있지만 DataFrame은 더 좋습니다 감사합니다! (같은 방법 다음하지만)

답변

1

더 압축 된 구문 :

df=sqlContext.createDataFrame([[5,100,5],[1,200,5],[1,150,4],[3,500,5]],['A','B','C']) 
df.registerTempTable('df') # Making SQL queries possible 
df_t=sqlContext.sql('select A,count(B) from df group by A having count(B)=1') # step 1 to 4 in 1 statement 
df2=df.join(df_t,df.A==df_t.A,'leftsemi') # only keep records that have a matching key 

어떤 사람들은 '왼쪽 킵'과 'leftsemi'을 참조하십시오. 키가 df_t에도 존재하면 데이터 프레임 1의 레코드를 유지합니다.

+0

감사합니다. 너는 나를 도왔다. – feechka