是否可以仅合并某些列?我有一个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。
我可以合并然后删除不需要的列,但似乎有更好的方法。
答案 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
是两个数据框唯一共有的列。