一部の列のみをマージすることは可能ですか?列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になります。
不要な列をマージして削除することもできますが、より良い方法があるようです。
サブデータフレームをマージできます(これらの列のみ):
df2[list('xab')] # df2 but only with columns x, a, and b
df1.merge(df2[list('xab')])
2つのブラケットを使用したいので、VLOOKUPのようなアクションを実行している場合:
df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')
これにより、元のdfのすべてが得られ、結合したいdf2の対応する列が1つ追加されます。
.loc
を使用して、すべての行を持つ特定の列を選択し、それをプルできます。以下に例を示します。
pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')
この例では、dataframe1とdataframe2をマージしています。 「キー」で外部左結合を実行することを選択しました。ただし、dataframe2には.iloc
を指定しているため、必要な行と列を数値形式で指定できます。 :
を使用すると、すべての行を選択できますが、[0:5]
は最初の5列を選択します。 .loc
を使用して名前で指定することもできますが、長い列名を扱う場合は、.iloc
の方が適している場合があります。
これは、2つのテーブルから選択した列をマージすることです。
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)
私は次のクエリに似たマージを構築しようとしている同じ状況があります
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