Условное слияние в пандах - PullRequest
0 голосов
/ 25 сентября 2019

Мой простой вопрос: я использую pd.merge для объединения двух df.Вот строка кода:

pivoted = pd.merge(pivoted, concerned_data, on='A')

, и я хочу, чтобы on = 'B' всякий раз, когда строка имеет значение столбца A как ноль.Есть ли способ сделать это?

Редактировать:

В качестве примера, если

 df1:   A | B |randomval
        1 | 1 |   ty
       Nan| 2 | asd
 df2:   A | B  |randomval2
        1 | Nan|   tyrte
        3 | 2  | asde

Так, если на = 'A' и значениеNan - это любой из df (для отдельной строки), который я хочу включить = 'B' только для этой строки

Спасибо!

1 Ответ

0 голосов
/ 25 сентября 2019

Вы можете создать третий столбец в вашем pandas.DataFrame, который включает в себя эту логику и объединить с ней.

Например, создать фиктивные данные

df1 = pd.DataFrame({"A" : [1, None], "B" : [1, 2], "Val1" : ["a", "b"]})
df2 = pd.DataFrame({"A" : [1, 2], "B" : [None, 2], "Val2" : ["c", "d"]})

Создать столбец c которая имеет эту логику

df1["C"] = pd.concat([df1.loc[~df1.A.isna(), "A"], df1.loc[df1.A.isna(), "B"]],ignore_index=False)
df2["C"] = pd.concat([df2.loc[~df2.A.isna(), "A"], df2.loc[df2.A.isna(), "B"]],ignore_index=False)

Наконец, объедините этот общий столбец и включите в него только столбцы значений

df3 = pd.merge(df1[["Val1","C"]], df2[["Val2","C"]], on='C')

In [27]: df3
Out[27]:
  Val1    C Val2
0    a  1.0    c
1    b  2.0    d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...