Создайте фрейм данных с помощью np.column_stack, если df только 1 строки - PullRequest
0 голосов
/ 23 июня 2019

Я следую в этой теме и принимаю ответ: Лучший способ объединения / объединения по диапазону в пандах

Я применяю одну и ту же логику динамически к нескольким фреймам данных, чтобы присоединиться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))

Как я мог это сделать?

1 Ответ

0 голосов
/ 23 июня 2019

Я сделал это по-другому, добавив столбец A_value в моем B df и поместив значение @ A.at[0;A_Value]

Заинтересован, чтобы понять, как это можно сделать, следуя той же логике, что и в упомянутой темехотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...