Как применить несколько операторов if? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть df, и я хочу применить следующую инструкцию для каждой строки:

IF df['aon'] == 12, recode to 10,  but also change on the same row df['identity'] == 4 and df['NO'] == 2.5 df['HR'] == 110

ELSEIF df['aon'] == 10, recode to 8 .

Если эти условия не выполняются, я хочу оставить каждую строку без изменений.Я знаю способ сделать это, но я бы хотел наиболее эффективный способ, если это возможно.

До;

Aon    Identity    No    HR

11     8.0         3.5   99
12     7.0         3.1   99
21     8.0         2.8   100
12     7.0         1.5   78
31     4.0         1.2   95

После;

Aon    Identity    No    HR

11     8.0         3.5   99
12     4.0         2.5   110
21     8.0         2.8   100
12     4.0         2.5   110
31     4.0         1.2   95

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы сомневаетесь, неясно, какое именно условие вы хотите, но вы можете использовать комбинацию логических операций и панд, где функция для достижения желаемого

, например, если вы хотите выбрать строки, соответствующие следующему условию df ['identity'] == 4 and df ['NO'] == 2.5 df ['HR'] == 110 вы можете сделать

cond = (df['identity'] == 4) & (df['NO'] == 2.5) & (df['HR'] == 110)

## then you can use the above condition to set value on col1 like this
## this will set 10 to rows not matching the cond
df["col1"] = df["col1"].where(cond, 10)


## this will set 10 to rows matching the cond
df["col1"] = df["col1"].mask(cond, 10)
0 голосов
/ 27 сентября 2019

Это должно сработать.Поскольку у вас нет входных данных с Aon, равным 10 - я взял 21 в качестве примера, поскольку он существует.

>>> df
   Aon  Identity   No   HR
0   11       8.0  3.5   99
1   12       7.0  3.1   99
2   21       8.0  2.8  100
3   12       7.0  1.5   78
4   31       4.0  1.2   95
>>> df.apply(lambda x: {"Aon": 10, "Identity": 4, "No": 2.5, "HR": 110} if x["Aon"]==12 else ({"Aon": 8, "Identity": x.Identity, "No": x.No, "HR": x.HR} if x["Aon"]==21 else x), axis=1)
    Aon     HR  Identity   No
0  11.0   99.0       8.0  3.5
1  10.0  110.0       4.0  2.5
2   8.0  100.0       8.0  2.8
3  10.0  110.0       4.0  2.5
4  31.0   95.0       4.0  1.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...