如果两者之间存在匹配,如何从第二个df中获取项目

时间:2018-11-02 09:54:08

标签: python pandas numpy

这个问题可能已经答案了,但是我找不到任何答案。

如果两个数据框之间都存在匹配,我想从第二个数据框中获取要追加到第一个数据框中新列的项目

在这里,我正在显示一些示例数据,这些数据与我面临的情况非常相似。

import pandas as pd
import numpy as np
a = np.arange(3).repeat(3)
b = np.tile(np.arange(3),3)

df1 = pd.DataFrame({'a':a, 'b':b})

    a   b
0   0   0
1   0   1
2   0   2
3   1   0
4   1   1
5   1   2
6   2   0
7   2   1
8   2   2

a2 = np.arange(1, 4).repeat(3)
b2 = np.tile(np.arange(3),3)
c = np.random.randint(0, 10, size=a2.size)
df2 = pd.DataFrame({'a2':a2, 'b2':b2, 'c':c})


  a2    b2  c
0   1   0   3
1   1   1   1
2   1   2   9
3   2   0   5
4   2   1   8
5   2   2   4
6   3   0   1
7   3   1   6
8   3   2   1

所需的输出应类似于

    a   b  c
0   0   0 nan
1   0   1 nan
2   0   2 nan
3   1   0 3
4   1   1 1
5   1   2 9
6   2   0 5
7   2   1 8
8   2   2 4

不幸的是,我还是无法提出解决方案。

1 个答案:

答案 0 :(得分:1)

在左联接中使用merge并重命名列名称:

df = df1.merge(df2.rename(columns={'a2':'a', 'b2':'b'}), on=['a','b'], how='left')
print (df)
   a  b    c
0  0  0  NaN
1  0  1  NaN
2  0  2  NaN
3  1  0  3.0
4  1  1  5.0
5  1  2  0.0
6  2  0  2.0
7  2  1  6.0
8  2  2  2.0