简体   繁体   中英

How to update existing columns in a dataframe based on multiple conditions on other columns in python?

df1:

Pan_no   Target    Debt_aum  Hml
Xxx        0        5000     Low
YYY        1          0     medium 
ZZZ        0         200     Low
Aaa        1        15000    High
Yyy        1          0      High

Condition:

If the debt_aum =0 and target =1 then hml should be Low for those rows.

Expected Output:

Pan_no   Target   Debt_aum   Hml
Xxx        0        5000     Low
YYY        1          0      Low 
ZZZ        0         200     Low
Aaa        1        15000    High
Yyy        1          0      Low

In SQL I will just write an update statement. In python I am having trouble. I tired doing

for i in df1['hml']:
   if df1[target] == 1 and df1[debt_aum] == 0:
      i = 'Low'
  else:
       i

IIUC, you can try numpy.where function:

import pandas as pd
import numpy as np
df["Hml"] = np.where(((df["Debt_aum"] == 0) & (df["Target"])), "Low", df["Hml"])
df

Output

Pan_no Target Debt_aum Hml
Xxx 0 5000 Low
YYY 1 0 Low
ZZZ 0 200 Low
Aaa 1 15000 High
Yyy 1 0 Low

Try with mask :

df["Hml"] = df["Hml"].mask(df["Debt_aum"].eq(0)&df["Target"].eq(1),"Low")

>>> df
  Pan_no  Target  Debt_aum   Hml
0    Xxx       0      5000   Low
1    YYY       1         0   Low
2    ZZZ       0       200   Low
3    Aaa       1     15000  High
4    Yyy       1         0   Low

a solutiont with loc :

df1.loc[(df1['Debt_aum']==0)&(df1['Target'] == 1)] = 'Low'
df1
'''
  Pan_no Target Debt_aum   Hml
0    Xxx      0     5000   Low
1    Low    Low      Low   Low
2    ZZZ      0      200   Low
3    Aaa      1    15000  High
4    Low    Low      Low   Low

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM