熊猫只加入某一列

时间:2019-07-11 21:53:28

标签: python pandas dataframe join

我有数据框A和数据框B,我想将B连接到A上,但只连接B上的某列。

dataA = ['a', 'c', 'd', 'e']
A = pd.DataFrame(dataA, columns=['testA'])

dataB = [['a', 1, 'asdf'], 
        ['b', 2, 'asdf'], 
        ['c', 3, 'asdf'], 
        ['d', 4, 'asdf'], 
        ['e', 5, 'asdf']]
B = pd.DataFrame(data1, columns=['testB', 'num', 'asdf'])

Out[1]: A
    testA
0   a
1   c
2   d
3   e

Out[2]: B
    testB   num     asdf
0   a       1       asdf
1   b       2       asdf
2   c       3       asdf
3   d       4       asdf
4   e       5       asdf

我当前的代码是:

Out[3]: A.join(B.set_index('testB'), on='testA')
    testA   num     asdf
0   a       1       asdf
1   c       3       asdf
2   d       4       asdf
3   e       5       asdf

我想要的输出仅是按如下所示连接'num'列,而忽略'asdf'列,如果有更多列,则忽略所有其他列:

Out[4]: A

    testA   num 
0   a       1   
1   c       3   
2   d       4    
3   e       5    

3 个答案:

答案 0 :(得分:0)

一种方法可能是使用merge

new_df= A.merge(B, how='left', left_on='testA', right_on='testB')[['testA', 'num']]

结果:

  testA  num
0     a    1
1     c    3
2     d    4
3     e    5

答案 1 :(得分:0)

使用map,首先创建一个pd.Series,将要移入的列作为值,然后在索引中设置“映射”列。这样会忽略不需要的其他列并且不对其进行任何工作:

A['num'] = A['testA'].map(B.set_index('testB')['num'])
A

输出:

  testA  num
0     a    1
1     c    3
2     d    4
3     e    5

答案 2 :(得分:0)

使用已有的内容,仅保留所需的列。

z = a.join(b.set_index('testB'), on='testA')[["testA","num"]]

输出:

    testA   num
0   a       1
1   c       3
2   d       4
3   e       5