일부 열만 병합 할 수 있습니까? 열 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이됩니다.
병합 한 다음 원하지 않는 열을 삭제할 수 있지만 더 나은 방법이있는 것 같습니다.
일부 열만 병합 할 수 있습니까? 열 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이됩니다.
병합 한 다음 원하지 않는 열을 삭제할 수 있지만 더 나은 방법이있는 것 같습니다.
답변:
하위 DataFrame (해당 열만 포함)을 병합 할 수 있습니다.
df2[list('xab')] # df2 but only with columns x, a, and b
df1.merge(df2[list('xab')])
list('xab')
그래서리스트 요소에 문자열 'XAB'과 변환을의 각 요소 (문자) 소요 list('xab')
반환 ['x', 'a', 'b']
. 각 열에 이름으로 단일 문자가있는 경우 작동합니다. 귀하의 경우에는 df1.merge (df2 [ 'Unique_External_Users'], * other_arguments)를 수행해야한다고 생각합니다. ... 대부분의 아마 당신은 이미 그것을 이미 풀었을 것입니다. 그냥 저와 같은 초보자들을 위해 이것을 남겨 두었습니다
두 개의 대괄호를 사용하고 싶으므로 VLOOKUP 종류의 작업을 수행하는 경우 :
df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')
이것은 원래 df의 모든 것을 제공하고 결합하려는 df2의 해당 열을 추가합니다.
대상 데이터 프레임에서 열을 삭제하고 싶지만 조인에 열이 필요한 경우 다음을 수행 할 수 있습니다.
df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
left_on = 'key2', right_on = 'key1').drop('key1')
이 .drop('key1')
부분은 'key1'이 처음에 조인해야하는 경우에도 결과 데이터 프레임에 유지되는 것을 방지합니다.
KeyError: "['key1'] not found in axis"
를 사용 .loc
하여 모든 행이있는 특정 열을 선택한 다음 끌어 올 수 있습니다. 예는 다음과 같습니다.
pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')
이 예에서는 dataframe1과 dataframe2를 병합합니다. '키'에 대한 외부 왼쪽 조인을 선택했습니다. 그러나 dataframe2의 .iloc
경우 숫자 형식으로 원하는 행과 열을 지정할 수 있도록 지정했습니다 . 를 사용 :
하여 모든 행을 [0:5]
선택 하지만 처음 5 개 열을 선택합니다. .loc
이름으로 지정하는 데 사용할 수 있지만 긴 열 이름을 다루는 경우 .iloc
더 좋을 수 있습니다.
.loc
복사본을 만들 것이며 고통 스러울 수있는 큰 df에 주의하십시오 . 병합 한 다음 즉시 동일한 표현식에서 열 조각을 가져 오는 것이 더 나을 수 있습니다.
두 테이블에서 선택한 열을 병합합니다.
경우는 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)