Python Pandas只合并某些列

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

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

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

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

348305 次浏览

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

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列, 和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)

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

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是两个数据帧唯一相同的列。