Как вписать значения в столбец, когда в других столбцах выполняются определенные условия, используя fillna()
Я рассчитал количество, когда credit_history имеет значения NaN.
Вывод, когда Credit_History равен NaN:
Self_Employed
Yes 532
No 32
Married
No 398
Yes 21
И для числовых значений я рассчитал среднее значение для всех столбцов
вывод для нечисловых значений, когда Credit_History равен NaN:
Mean Applicant Income: 54003.1232
LoanAmount: 35435.12
Loan_Amount_Term: 360
ApplicantIncome: 30000
Как мне теперь использовать fillna() в этих случаях:
Случай 1: когда Self_Employed = Y и замужем = N; Credit_History должен быть 0
Случай 2: когда Self_Employed = N и ApplicantIncome > 20000; Credit_History должен быть 1
Случай 3: Когда Self_Employed = Y, Женат = N и ApplicantIncome > 2000; Credit_History должен быть 1
Кроме того, когда использование fillna() не так очевидно для определенных условий, можем ли мы использовать сводную таблицу для вычисления медианных значений, а затем рассчитать их с помощью fillna()?
Заранее спасибо.
1 ответ
Использование numpy.select
и если все условия False
, выход определяется параметром default
:
from itertools import product
c = ['Self_Employed','Married','ApplicantIncome']
df = pd.DataFrame(list(product(list('NY'), list('NY'), [10000, 30000])),
columns=c)
m1 = (df.Self_Employed == 'Y') & (df.Married == 'N')
m2 = (df.Self_Employed == 'N') & (df.ApplicantIncome > 20000)
m3 = m1 & (df.ApplicantIncome > 20000)
df['Credit_History'] = np.select([m1, m2, m3], [0,1,1], default=2)
print (df)
Self_Employed Married ApplicantIncome Credit_History
0 N N 10000 2
1 N N 30000 1
2 N Y 10000 2
3 N Y 30000 1
4 Y N 10000 0
5 Y N 30000 0
6 Y Y 10000 2
7 Y Y 30000 2
Но если хотите заменить условиями добавьте fillna
:
c = ['Self_Employed','Married','ApplicantIncome']
df = pd.DataFrame(list(product(list('NY'), list('NY'), [10000, 30000])),
columns=c).assign(Credit_History=[np.nan,1,0, np.nan] *2)
print (df)
Self_Employed Married ApplicantIncome Credit_History
0 N N 10000 NaN
1 N N 30000 1.0
2 N Y 10000 0.0
3 N Y 30000 NaN
4 Y N 10000 NaN
5 Y N 30000 1.0
6 Y Y 10000 0.0
7 Y Y 30000 NaN
m1 = (df.Self_Employed == 'Y') & (df.Married == 'N')
m2 = (df.Self_Employed == 'N') & (df.ApplicantIncome > 20000)
m3 = m1 & (df.ApplicantIncome > 20000)
s = pd.Series(np.select([m1, m2, m3], [0,1,1], default=2), index=df.index)
df['Credit_History'] = df['Credit_History'].fillna(s)
print (df)
Self_Employed Married ApplicantIncome Credit_History
0 N N 10000 2.0
1 N N 30000 1.0
2 N Y 10000 0.0
3 N Y 30000 1.0
4 Y N 10000 0.0
5 Y N 30000 1.0
6 Y Y 10000 0.0
7 Y Y 30000 2.0