170

是否可以只合并某些列?我有一个 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。

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

4

6 回答 6

191

您想使用两个括号,所以如果您正在执行 VLOOKUP 类型的操作:

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

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

于 2017-03-13T14:18:52.707 回答
96

您可以合并子数据帧(仅包含这些列):

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

df1.merge(df2[list('xab')])
于 2013-07-31T18:46:03.367 回答
33

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

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

.drop(columns = 'key1')部分将阻止“key1”保留在结果数据框中,尽管它首先需要加入。

于 2019-10-14T10:14:09.180 回答
11

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

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

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

于 2016-12-14T20:33:15.333 回答
9

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

如果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)
于 2017-05-22T21:48:14.043 回答
3

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

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

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

于 2021-07-07T16:05:59.193 回答