Python Pandas는 특정 열만 병합합니다.


109

일부 열만 병합 할 수 있습니까? 열 x, y, z 및 df2 열 x, a, b, c, d, e, f 등이있는 DataFrame df1이 있습니다.

x에서 두 개의 DataFrame을 병합하고 싶지만 전체 DataFrame이 아닌 df2.a, df2.b 열만 병합하고 싶습니다.

결과는 x, y, z, a, b가있는 DataFrame이됩니다.

병합 한 다음 원하지 않는 열을 삭제할 수 있지만 더 나은 방법이있는 것 같습니다.


1
앤디 : 쉬웠어요 ... 휴식이 필요 해요. 분명히 너무 복잡하게 만들고 있어요. 명확하게 해주셔서 감사합니다!
BubbleGuppies 2013

답변:


81

하위 DataFrame (해당 열만 포함)을 병합 할 수 있습니다.

df2[list('xab')]  # df2 but only with columns x, a, and b

df1.merge(df2[list('xab')])

6
흠, dropna의 하위 집합과 같은 기본 방법이 있어야하는지 궁금합니다. github issue
Andy Hayden

흠 ... 이것을 사용하여 'Unique_External_Users'열을 df2에서 df1로 병합하려고했지만 오류가 발생했습니다 ... "None of [Index ([ 'U', 'n', 'i', 'q', 'u') ','e ',' ','E ','x ','t ','e ','r ','n ','a ', \ n'l ',' ','U ', 's', 'e', ​​'r', 's'], \ n dtype = 'object')]는 [열] "에 있습니다.
CoolDocMan

다음은 코드입니다. ... df1.merge (df2 ( 'Unique_External_Users')])
CoolDocMan

1
: 내가 생각 @CoolDocMan 당신은 제안 된 답변에서 뭔가 놓친 list('xab')그래서리스트 요소에 문자열 'XAB'과 변환을의 각 요소 (문자) 소요 list('xab')반환 ['x', 'a', 'b']. 각 열에 이름으로 단일 문자가있는 경우 작동합니다. 귀하의 경우에는 df1.merge (df2 [ 'Unique_External_Users'], * other_arguments)를 수행해야한다고 생각합니다. ... 대부분의 아마 당신은 이미 그것을 이미 풀었을 것입니다. 그냥 저와 같은 초보자들을 위해 이것을 남겨 두었습니다
SOf_PUAR

114

두 개의 대괄호를 사용하고 싶으므로 VLOOKUP 종류의 작업을 수행하는 경우 :

df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')

이것은 원래 df의 모든 것을 제공하고 결합하려는 df2의 해당 열을 추가합니다.


11

대상 데이터 프레임에서 열을 삭제하고 싶지만 조인에 열이 필요한 경우 다음을 수행 할 수 있습니다.

df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
                left_on = 'key2', right_on = 'key1').drop('key1')

.drop('key1')부분은 'key1'이 처음에 조인해야하는 경우에도 결과 데이터 프레임에 유지되는 것을 방지합니다.


4
시도하면 다음과 같은 오류가 발생합니다.KeyError: "['key1'] not found in axis"
Tanya Branagan

3
try .drop (columns = [ 'key1'])
psangam

또는 .drop ( 'key1', axis = 1)
tonneofash

8

를 사용 .loc하여 모든 행이있는 특정 열을 선택한 다음 끌어 올 수 있습니다. 예는 다음과 같습니다.

pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')

이 예에서는 dataframe1과 dataframe2를 병합합니다. '키'에 대한 외부 왼쪽 조인을 선택했습니다. 그러나 dataframe2의 .iloc경우 숫자 형식으로 원하는 행과 열을 지정할 수 있도록 지정했습니다 . 를 사용 :하여 모든 행을 [0:5]선택 하지만 처음 5 개 열을 선택합니다. .loc이름으로 지정하는 데 사용할 수 있지만 긴 열 이름을 다루는 경우 .iloc더 좋을 수 있습니다.


1
.loc복사본을 만들 것이며 고통 스러울 수있는 큰 df에 주의하십시오 . 병합 한 다음 즉시 동일한 표현식에서 열 조각을 가져 오는 것이 더 나을 수 있습니다.
smci

7

두 테이블에서 선택한 열을 병합합니다.

경우는 table_1포함 t1_a,t1_b,t1_c..,id,..t1_z열을, 그리고 table_2포함 t2_a, t2_b, t2_c..., id,..t2_z한 후, 열을 만 T1_A, ID가, t2_a 최종 테이블에 필요

mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')
# save resulting output file    
mergedCSV.to_csv('output.csv',index = False)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.