我正在关注该主题和接受的答案:Best way to join / merge by range in pandas
我正在基于几个准则和2 df之间的范围值,在多个数据帧上动态应用相同的逻辑以加入2 df
A = pd.DataFrame(dict(
A_id=range(10),
A_value=range(5, 105, 10)
))
B = pd.DataFrame(dict(
B_id=range(5),
B_low=[0, 30, 30, 46, 84],
B_high=[10, 40, 50, 54, 84]
))
A
A_id A_value
0 0 5
1 1 15
2 2 25
3 3 35
4 4 45
5 5 55
6 6 65
7 7 75
8 8 85
9 9 95
B
B_high B_id B_low
0 10 0 0
1 40 1 30
2 50 2 30
3 54 3 46
4 84 4 84
a = A.A_value.values
bh = B.B_high.values
bl = B.B_low.values
i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh))
pd.DataFrame(
np.column_stack([A.values[i], B.values[j]]),
columns=A.columns.append(B.columns)
现在,有时我的A df只有一行,并且我需要将A df中的行添加到B df的有效行中。我没有合并它们的条件,因为我的A df的所有行(即1)在2 df之间都匹配。
我无法使用与线程中相同的逻辑来创建输出df。
如何合并1行的df与仅满足我np中的条件的行以及其他df所在的行合并?
一个简化的例子,我有:
A = pd.DataFrame(dict(
A_id=[0],
A_value=123
))
B = pd.DataFrame(dict(
B_id=range(5),
B_low=[0, 30, 30, 46, 84],
B_high=[10, 40, 50, 54, 84]
))
A
A_id A_value
0 0 123
B
B_high B_id B_low
0 10 0 0
1 40 1 30
2 50 2 30
3 54 3 46
4 84 4 84
i = np.where(B['B_low'].values == 30)
我会给我一个数组,其中B中的行B_low等于30
现在我有了有效的行,我试图按照相同的逻辑来执行此操作,但无济于事:
pd.DataFrame(np.column_stack([A.values[i], B.values),
columns=A.columns.append(B.columns))
我该怎么办?
答案 0 :(得分:0)
我已经用另一种方式完成了,在我的B df中添加一列A_value并将值@ A.at[0;A_Value]
有兴趣了解如何遵循与上述主题相同的逻辑来完成