根据条件从另一个数据框的值向数据框添加新列

时间:2020-09-23 00:02:08

标签: python pandas numpy

我有两个不同大小的DataFrame。

a = np.arange(0,100,10)
b = np.random.random_sample((10,))
df1 = pd.DataFrame({'a': a, 'b': b})
df1

    a   b
0   0   0.340319
1   10  0.821281
2   20  0.592853
3   30  0.589032
4   40  0.533543
5   50  0.628839
6   60  0.431976
7   70  0.306126
8   80  0.080576
9   90  0.533240

c = np.arange(4,14,2)
df2 = pd.DataFrame({'c': c})
df2
    c
0   4
1   6
2   8
3   10
4   12

通过比较df2中“ c”列中的值与df1中“ a”列中的值,我想将df2添加到新列中,该列将包含df1中“ b”列中的值

例如,列c的前三个值是4、6和8,它们都在df1中列a的前两行(0到10)定义的范围内。这就是为什么在创建的新列中,我想将所有行中的a = 0行的b值(0.340139)分配给它们。

类似地,对于c列中的10和12,由于它们在10到20之间,因此它们应该获得a = 10行的b值(0.821281)。

所以最后,我应该得到一个这样的DataFrame。

df2

    c   d
0   4   0.340319
1   6   0.340319
2   8   0.340319
3   10  0.340319
4   12  0.821281

因此,如果你们有任何提示,将不胜感激。

1 个答案:

答案 0 :(得分:0)

我们可以尝试merge_asof

out = pd.merge_asof(df2, df1, left_on='c',right_on='a', allow_exact_matches=False)
    c   a         b
0   4   0  0.340319
1   6   0  0.340319
2   8   0  0.340319
3  10   0  0.340319
4  12  10  0.821281