2014-11-15 5 views
1

추가가 중복을 생성하지 않도록 확실히하면서 데이터 프레임 (또는 더 효율적인 경우 시리즈)에 추가해야합니다. 데이터 프레임이 커짐에 따라, drop_duplicates를 호출하는 것만으로도 비효율적 인 것처럼 보입니다. drop_duplicates를 호출하는 것은 전체 데이터 집합을 추가 할 때마다 중복을 검사해야하기 때문입니다.중복없이 시리즈에 추가하는 효율적인 방법

데이터에는 두 개의 열만 있으므로 색인으로 바꾸면 속도가 빨라질 수 있습니다. (또는 두 개의 열을 계층 적 색인으로). 팬더는 중복 색인을 허용하지 않는 방법이 있습니까?

print accumulating_result 
    c1 c2 
0 A x1 
1 B x2 
2 B x3 
3 C x4 

print new 
    c1 c2 
0 B x3 
1 C x4 
2 C x5 

이 accumulating_result 얻을 수있는 새로운의 추가를 수행 : 여기

은 샘플 문제입니다 그것은 가치가 무엇을 위해

print accumulating_result 
    c1 c2 
0 A x1 
1 B x2 
2 B x3 
3 C x4 
4 C x5 

, 열 (C2)의 모든 항목은 고유해야합니다.

아이디어가 있으십니까?

답변

2

당신은 combine_first()를 사용할 수 있습니다

data1 = """ c1 c2 
0 A x1 
1 B x2 
2 B x3 
3 C x4""" 


data2 = """ c1 c2 
0 X x3 
1 Y x4 
2 Z x5""" 

import io 
import pandas as pd 

df1 = pd.read_csv(io.BytesIO(data1), delim_whitespace=True) 
df2 = pd.read_csv(io.BytesIO(data2), delim_whitespace=True) 

df1.set_index("c2", inplace=True) 
df2.set_index("c2", inplace=True) 

df1.combine_first(df2) 

출력 :

c1 
c2 
x1 A 
x2 B 
x3 B 
x4 C 
x5 Z 

하지만 때마다 모든 데이터를 복사 할 수 있습니다. 어쩌면 HDF5를 사용하거나 데이터베이스가 더 좋을 수도 있습니다.

+0

감사합니다. 작업을 수행 할 방법이 없다면이 대답으로 충분할 것입니다. 나는 총을주고 충분한 숫양이나 시간이 있는지 알아볼 것이다. –

관련 문제