Я следую в этой теме и принимаю ответ: Лучший способ объединения / объединения по диапазону в пандах
Я применяю одну и ту же логику динамически к нескольким фреймам данных, чтобы присоединиться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 имеет только одну строку, и мне нужно добавить в действительные строки моего B df строку вДФ.У меня нет критериев для их слияния, потому что у моего A df есть все строки (т. Е. 1), совпадающие между 2 df.
Мне не удается создать выходной df с той же логикой, что и в потоке.
Как я могу сделать, чтобы объединить df из 1 строки только со строками, в которых встречаются критерии в моем np.where другого 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))
Как я мог это сделать?