2017-10-21 104 views
1

我有3個df,每個列有25個列。所有列在3 df中都是相同的。合併3個相同名稱的數據庫,並將它們重命名爲python

我想合併三個df,並將25列df1的列名更改爲「_a」,將25列df2更改爲「_b」,將25列df3更改爲「_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']) 

另一種方法:

來源的DF:

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列表:

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

和後綴的列表:

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 

簡短的解釋:列表中的理解,我們正在生成的DFS與已經改名列的列表:

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

偉大的演示,甚至在編輯之前! [列表理解](https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)經常讓那些新加入Python的人感到困惑,所以他們通常應該得到一個小小的解釋或說明。儘管如此,你的回答是清晰而簡潔的。 +1 – Aaron3468

+0

@ Aaron3468,謝謝!我已經添加了一個簡短的解釋... – MaxU

+0

謝謝! 'd','left',on ='year',後綴= ['_ a','_ b']), ['','_ c'])不起作用,因爲我猜數據框的列應該是相同的(注意合併2個dfs將列更改爲「_a」和「_b」,因此它們與df3不同。如何使用重命名函數來更改第三個df的後綴? – Andrew

相關問題