2017-11-05 12 views
1

안녕하세요, 저는 Python을 처음 사용하고 현재 Python 버전 3.x를 사용하고 있습니다. 나는 csv에서 걸러 낼 필요가있는 매우 큰 데이터 세트를 가지고있다. 나는 온라인으로 수색을하고 많은 사람들이 pandas DataFrame (로딩)에 그것을 로딩하는 것을 추천했다.Python 3.x pandas 중복을 비교하고 csv에서 더 높은 값으로 행을 삭제하는 방법은 무엇입니까?

은 내 열은 다음과 같이 정의 할 수 있습니다 : "ID", "이름", "시간", "토큰", "텍스트"내가 어떤 중복 "토큰"에서 확인해야

- 수행 할 수있는

안양 = 안양를 통해 [df.Token.duplicate이 (= 거짓 유지)]

을 (만약 내가 잘못 제발 올바른) 그러나 문제는, 내가 계속해야 원래의 행 while 다른 사본을 삭제합니다. 이를 위해, 나는 그것을 "시간"과 비교하라는 말을 들었다. 가장 작은 값을 가진 "시간"은 원본 (유지)이며 나머지 복제는 드롭됩니다. 예를 들어

:

ID 이름 시간 토큰 텍스트

1 | 존 | 333 | 안녕하세요 | xxxx

2 | 메리 | 233 | Hiiii | xxxx

3 | Jame | 222 | 안녕하세요 | xxxx

4 | 켄 | 555 | 안녕하세요 | XXXX

원하는 출력 :

2 | 메리 | 233 | Hiiii | xxxx

3 | Jame | 222 | 안녕하세요 | XXXX 내가 무슨 짓을

: 나는 붙어 어딘지

##compare and keep the smaller value 
    def dups(df): 
     return df[df["Time"] < df["Time"]] 

df = df[df.Token.duplicate()].apply(dups) 

이 약이다! 누구든지 도와 줄 수 있습니까? Python으로 코딩 한 나의 처음, 어떤 도움을 주시면 대단히 감사하겠습니다.

+0

'df = df.drop_duplicates (하위 집합 = [ '토큰', 계속 = '첫 번째') ' –

+0

여기에서 순서가 중요합니까? 그렇지 않다면'Time'을 정렬 할 수 있습니다. 그리고 나서'drop_duplicates'가 가장 작은 행을 유지하도록 보장됩니다. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Hellooo, 답장을 보내 주셔서 감사합니다. erm. 그러나 내가 아는 한 (틀 렸을 수도 있습니다.) '첫 번째'는 첫 번째 항목을 유지하고 있지만 수천 개의 행과 '시간'은 모두 무작위로 기록됩니다 , 그래서 첫 번째 엔트리가 더 높은 값을 가질 수 있습니다. 비교할 방법이 있습니까 ("시간"에 따라)? 그래서 나는 더 작은 값을 유지할 수있다. –

답변

1

사용 sort_values + drop_duplicates :

df = df.sort_values('Time')\ 
     .drop_duplicates('Token', keep='first').sort_index() 
df 

    ID Name Time Token Text 
1 2 Mary 233 Hiiii xxxx 
2 3 Jame 222 Hello xxxx 

마지막 sort_index 호출은 원래 dataframe에 질서를 복원합니다. 이 점을 넘어서는 단조롭게 증가하는 색인을 검색하려면 reset_index으로 전화하십시오.

+0

Oooohhhhh ...... 이제 이해했습니다. 감사합니다. soooooo 많이 ..... –