我有两个不同大小的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
因此,如果你们有任何提示,将不胜感激。
答案 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