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

我想合并x上的两个dataframe,但我只想合并列df2。df2。b -不是整个数据帧。

结果将是一个包含x, y, z, a, b的数据帧。

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


你可以合并子数据帧(只有这些列):

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

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

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

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

在本例中,您将合并dataframe1和dataframe2。你已经选择在'key'上做一个左外连接。但是,对于dataframe2,您已经指定了.iloc,它允许您以数字格式指定您想要的行和列。使用:,选择所有行,但[0:5]选择前5列。您可以使用.loc来指定名称,但如果要处理较长的列名,那么.iloc可能更好。


你想要使用两个括号,所以如果你正在做一个VLOOKUP类型的动作:

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

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


这将合并两个表中的选定列。

如果table_1包含t1_a,t1_b,t1_c..,id,..t1_z列, 表_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)

如果您想要从目标数据帧中删除列,但该列是连接所必需的,您可以执行以下操作:

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

.drop(columns = 'key1')部分将防止'key1'被保留在结果数据帧中,尽管它首先被要求加入。


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

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

这里假设Key_Column是两个数据帧唯一相同的列。