2013-07-31 105 views
30

是否有可能只合並一些列?我有一個DataFrame df1列x,y,z和df2與列x,a,b,c,d,e,f等。Python的大熊貓只合並某些列

我想合併x上的兩個數據幀,但我只想要合併列df2.a,df2.b - 不是整個DataFrame。

其結果將是與X,Y,Z A數據幀,A,B。

我可以合併,然後刪除不需要的列,但似乎有一個更好的方法。

+1

安迪:那頭很容易的聖牛......我需要休息一下,我很明顯這太複雜了。感謝您的澄清! – joelotz

回答

32

你可以合併子非數據幀(只有那些列):

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

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

嗯,我不知道是否應該有dropna要做到這一點,像子集原生方式......將放在一起GitHub的問題 –

4

您可以使用.loc選擇包含所有行的特定列,然後扳指。示例如下:

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

在此示例中,您正在合併dataframe1和dataframe2。您已選擇在'鍵'上進行外部左連接。但是,對於dataframe2,您指定了.iloc,它允許您以數字格式指定所需的行和列。使用:,選擇所有行,但[0:5]選擇前5列。您可以使用.loc來指定名稱,但是如果您處理長列名稱,則.iloc可能會更好。

4

你想用兩個支架,所以如果你正在做一個VLOOKUP行動類別:

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

這會給你一切都在原來的DF +添加一個在DF2對應的列要加入。

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)

+0

謝謝你 - 這是所有我想要的。 –