Python Pandasは特定の列のみをマージします


109

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

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

結果は、x、y、z、a、bのデータフレームになります。

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


1
アンディ:簡単だった聖なる牛...休憩が必要です。明らかに複雑すぎます。明快さをありがとう!
BubbleGuppies 2013

回答:


81

あなたはサブDataFrameをマージすることができます(それらの列だけで):

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

df1.merge(df2[list('xab')])

6
うーん、ドロップナのサブセットのように、これを行うネイティブの方法があるべきかどうか疑問に思います... githubの問題をまとめます
Andy Hayden

うーん...私はこれを使用して列 'Unique_External_Users'をdf2からdf1にマージしようとしましたが、エラーが発生しました... "なし[[((U '、' e '、' '、' E '、' x '、' t '、' e '、' r '、' n '、' a '、\ n' l '、' '、' U '、 's'、 'e'、 'r'、 's']、\ n dtype = 'object')]は[columns] "にあります。
CoolDocMan

これがコードです。... df1.merge(df2( 'Unique_External_Users')])
CoolDocMan

1
@CoolDocMan私はあなたが提案された答えから何かを逃したと思います:list('xab')文字列 'xab'の各要素(文字)を受け取り、それをリスト要素に変換するので、をlist('xab')返します['x', 'a', 'b']。これは、各列の名前が1文字の場合に機能します。あなたの場合、df1.merge(df2 ['Unique_External_Users']、* other_arguments)を実行する必要があると思います。...おそらくあなたはすでにそれをすでに解決しており、私のようにこれを初心者のために残しているだけです
SOf_PUAR

114

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

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

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


11

列をターゲットデータフレームから削除したいが、結合に列が必要な場合は、次の操作を実行できます。

df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
                left_on = 'key2', right_on = 'key1').drop('key1')

この.drop('key1')部分は、最初に結合する必要があるにもかかわらず、「key1」が結果のデータフレームに保持されないようにします。


4
私はこれをしようと、私は次のエラーを取得する:KeyError: "['key1'] not found in axis"
ターニャBranagan

3
.drop(columns = ['
key1

または.drop( 'key1'、axis = 1)
tonneofash

8

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

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

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


1
.locコピーを作成することに注意してください。マージしてから、すぐに同じ式の列スライスを取得する方がよい場合があります。
smci

7

これは、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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.