web-dev-qa-db-ja.com

Python Pandas特定の列のみをマージ

一部の列のみをマージすることは可能ですか?列x、y、z、および列x、a、b、c、d、e、fなどのdf2を持つDataFrame df1があります。

Xの2つのDataFramesをマージしたいのですが、DataFrame全体ではなく、列df2.a、df2.bのみをマージしたいです。

結果は、x、y、z、a、bのDataFrameになります。

不要な列をマージして削除することもできますが、より良い方法があるようです。

74
joelotz

サブデータフレームをマージできます(これらの列のみ):

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

df1.merge(df2[list('xab')])
64
Andy Hayden

2つのブラケットを使用したいので、VLOOKUPのようなアクションを実行している場合:

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

これにより、元のdfのすべてが得られ、結合したいdf2の対応する列が1つ追加されます。

61

.locを使用して、すべての行を持つ特定の列を選択し、それをプルできます。以下に例を示します。

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

この例では、dataframe1とdataframe2をマージしています。 「キー」で外部左結合を実行することを選択しました。ただし、dataframe2には.ilocを指定しているため、必要な行と列を数値形式で指定できます。 :を使用すると、すべての行を選択できますが、[0:5]は最初の5列を選択します。 .locを使用して名前で指定することもできますが、長い列名を扱う場合は、.ilocの方が適している場合があります。

8

これは、2つのテーブルから選択した列をマージすることです。

table_1t1_a,t1_b,t1_c..,id,..t1_z列が含まれ、table_2t2_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)
6
Marco167

私は次のクエリに似たマージを構築しようとしている同じ状況があります

select
 rio.calculation_type,
 rio.asin, rio.country, rio.channel,
 rio.date, rio.running_inbound, 
 rio.running_outbound, 
 rio.inbound, 
 rio.outbound,
 ro.outbound as ro_outbound,
 min(ro.date) as date_out 
from
 running_inbound_and_outbound rio 
 left join running_outbound ro 
  on ro.running_outbound >= rio.running_inbound 
  and ro.country = rio.country 
  and ro.channel = rio.channel 
  and ro.asin = rio.asin 
  and ro.calculation_type = rio.calculation_type
 group by
  1, 2, 3, 4,5,6,7,8,9
0
Saket Dabi