2017-10-21 4 views
1

나는 각각 25 개의 열로 3 개의 df를가집니다. 모든 항목은 3df에서 동일합니다.동일한 이름을 가진 3 개의 데이터베이스를 병합하고 파이썬에서 이름을 바꿉니다.

3 df를 병합하고 df1의 25 열에 대해 "_a"로, df2의 25 열에 대해 "_b"로 변경하고 df3의 25 열에 대해 "_c"로 변경합니다.

pd.merge(pd.merge(df1,df2,'left',on='year',suffixes=['_a','_b']),df3,'left',on='year') 

방법, 위의 코드에 DF3의 모든 25 열을 변경하는 내가 이름을 바꾸거나 다른 기능을 사용합니까 :

나는 아래의 코드를 사용하여 무엇입니까?

감사합니다.

답변

2
pd.merge(pd.merge(df1,df2,'left',on='year',suffixes=['_a','_b']), 
     df3,'left',on='year',suffixes=['','_c']) 

또 다른 방법 :

소스 DFS :

In [71]: dfs = [d1,d2,d3] 

와 접미사의 목록 :

In [68]: d1 
Out[68]: 
    col1 col2 col3 
0  1  2  3 
1  4  5  6 

In [69]: d2 
Out[69]: 
    col1 col2 col3 
0 11 12 13 
1 14 15 16 

In [70]: d3 
Out[70]: 
    col1 col2 col3 
0 21 22 23 
1 24 25 26 

것은 이제 DFS의 목록을 만들어 보자

,369 다음과 같이 1,363,210
In [73]: suffixes = ['_a','_b','_c'] 

이제 우리는 한 번에 병합 할 수 있습니다

In [74]: pd.concat([df.add_suffix(suffixes[i]) for i,df in enumerate(dfs)], axis=1) 
Out[74]: 
    col1_a col2_a col3_a col1_b col2_b col3_b col1_c col2_c col3_c 
0  1  2  3  11  12  13  21  22  23 
1  4  5  6  14  15  16  24  25  26 

짧은 설명 :

In [75]: [suffixes[i] for i,df in enumerate(dfs)] 
Out[75]: ['_a', '_b', '_c'] 

In [76]: [df.add_suffix(suffixes[i]) for i,df in enumerate(dfs)] 
Out[76]: 
[ col1_a col2_a col3_a 
0  1  2  3 
1  4  5  6, col1_b col2_b col3_b 
0  11  12  13 
1  14  15  16, col1_c col2_c col3_c 
0  21  22  23 
1  24  25  26] 
+0

: 지능형리스트에 우리는 이미 이름이 바뀐 열 DFS의 목록을 생성하는 위대한 데모, 심지어 편집하기 전에! [List Comprehensions] (https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)은 종종 파이썬에 익숙하지 않은 사람들에게 혼란을 일으킬 수 있으므로 일반적으로 작은 설명이나 메모가 필요합니다. 그럼에도 불구하고 귀하의 대답은 명확하고 간결합니다. +1 – Aaron3468

+0

@ Aaron3468, 감사합니다! 나는 짧은 설명을 추가했습니다 ... – MaxU

+0

고마워요! pd.merge (pd.merge (df1, df2, 'left', on = 'year', 접미사 = [ '_ a', '_ b']), df3, '왼쪽', on = '연도', 접미사 = [ '', '_ c']) 데이터 프레임의 열이 동일해야합니다 (두 dfs를 병합하면 "_a"및 "_b"로 열이 변경되므로 df3과 동일하지는 않습니다. 이름 바꾸기 함수를 사용하여 세 번째 df의 접미어를 변경하는 방법은 무엇입니까? – Andrew