2017-10-21 11 views
1

私は3つのdfにそれぞれ25個の列を持っています。すべての列は3 dfで同じです。3つのデータベースを同じ名前でマージして、それらの名前をPythonに変更します

df1の25列の列名を "_a"に変更し、df2の25列の "_b"に変更し、df3の25列の "_c"に変更します。

私は以下のコード使用しています:私は上記のコードでDF3のすべての25個の列を変更するには、名前を変更したり、他のいくつかの機能を使用するにはどうすればよい

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

を?

ありがとうございました。

答えて

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 

はのはのDFのリストを作成してみましょう:

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

とサフィックスのリスト:

In [73]: suffixes = ['_a','_b','_c'] 

今、私たちは次のようにのような1つのステップでそれらをマージすることができます:

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 

短い説明:リスト内包で我々はすでに列の名前が変更されたのDFのリストを生成している:

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

偉大なデモンストレーション、編集の前に! [List Comprehensions](https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)は、Pythonの新機能を混乱させることが多いため、小さな説明や注釈が必要です。それにもかかわらず、あなたの答えははっきりと簡潔です。 +1 – Aaron3468

+0

@ Aaron3468、ありがとうございます!私は短い説明を追加しました... – MaxU

+0

ありがとう! pd.merge(pd.merge(df1、df2、 'left'、on = 'year'、接尾辞= ['_ a'、 '_ b'])、 df3、 'left'、on = 'year'、suffixes =データフレームの列が同じでなければならないと思うので、[''、 '_ c'])は機能しません。(2つのdfsを組み合わせると、列が "_a"と "_b"に変更され、df3とは異なります。名前変更機能を使って3番目のdfの接尾辞を変更するには? – Andrew

関連する問題