Python Pandas仅合并某些列

时间:2013-07-31 18:30:29

标签: python merge pandas

是否可以仅合并某些列?我有一个DataFrame df1,列x,y,z和df2,列x,a,b,c,d,e,f等。

我想在x上合并两个DataFrame,但我只想合并列df2.a,df2.b - 而不是整个DataFrame。

结果将是带有x,y,z,a,b的DataFrame。

我可以合并然后删除不需要的列,但似乎有更好的方法。

7 个答案:

答案 0 :(得分:60)

您可以合并子DataFrame(仅包含这些列):

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

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

答案 1 :(得分:49)

你想使用两个括号,所以如果你正在做一个VLOOKUP行动:

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

这将为您提供原始df中的所有内容+添加您想要加入的df2中的一个相应列。

答案 2 :(得分:7)

您可以使用.loc选择包含所有行的特定列,然后将其拉出来。一个例子如下:

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

在此示例中,您要合并dataframe1和dataframe2。您已选择在'键'上进行左外连接。但是,对于dataframe2,您已指定.iloc,它允许您以数字格式指定所需的行和列。使用:,您选择所有行,但[0:5]选择前5列。您可以使用.loc按名称指定,但如果您处理长列名称,那么.iloc可能会更好。

答案 3 :(得分:4)

这是为了合并两个表中的选定列。

如果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)

答案 4 :(得分:1)

如果要从目标数据框中删除列,但是联接需要列,则可以执行以下操作:

UIViewController

df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left', left_on = 'key2', right_on = 'key1').drop('key1') 部分将阻止'key1'保留在结果数据帧中,尽管它首先需要加入。

答案 5 :(得分:0)

我尝试建立合并的情况与以下查询类似

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

答案 6 :(得分:0)

对多字符列名的已接受答案的轻微扩展,默认使用内连接:

df1 = df1.merge(df2[["Key_Column", "Target_Column1", "Target_Column2"]])

这假设 Key_Column 是两个数据框唯一共有的列。