Создать новый столбец на основе условий из других столбцов в Python - PullRequest
0 голосов
/ 21 февраля 2019

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

Например:

d = {'year': [2010, 2011,2013, 2014], 'PD': [0.5, 0.8, 0.9, np.nan], 'PD_thresh': [0.7, 0.8, 0.9, 0.7]}
df_temp = pd.DataFrame(data=d)

Теперь я хочу создать условие, которое говорит:

псевдокод:

if for year X the value of PD is greater or equal to the value of PD_thresh
then set 0 in a new column y_pseudo 

otherwise set 1 

Мой ожидаемый результат такой:

df_temp 
Out[57]: 
   year   PD  PD_thresh  y_pseudo
0  2010  0.5        0.7       0.0
1  2011  0.6        0.7       0.0
2  2013  0.9        0.8       1.0
3  2014  NaN        0.7       NaN

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Ваши данные d отличаются от вашего результата, и я думаю, что вы имели в виду 1, если он превышает пороговое значение, а не наоборот, поэтому у меня есть это:

y = [a if np.isnan(a) else 1 if a>=b else 0 for a,b in zip(df_temp.PD,df_temp.PD_thresh)]
df_temp['y_pseudo'] = y

Вывод:

   year   PD  PD_thresh  y_pseudo
0  2010  0.5        0.7       0.0
1  2011  0.8        0.8       1.0
2  2013  0.9        0.9       1.0
3  2014  NaN        0.7       NaN
0 голосов
/ 21 февраля 2019

Используйте numpy.select с isna и ge:

m1 = df_temp['PD'].isna()
m2 = df_temp['PD'].ge(df_temp['PD_thresh'])

df_temp['y_pseudo'] = np.select([m1, m2], [np.nan, 1], default=0)
print (df_temp)
   year   PD  PD_thresh  y_pseudo
0  2010  0.5        0.7       0.0
1  2011  0.6        0.8       0.0
2  2013  0.9        0.9       1.0
3  2014  NaN        0.7       NaN

Другим решением является преобразование маски в целое числодля отображения True/False в 1/0 и установки только не пропущенных строк по notna:

m2 = df_temp['PD'].ge(df_temp['PD_thresh'])
m3 = df_temp['PD'].notna()

df_temp.loc[m3, 'y_pseudo'] = m2[m3].astype(int)
print (df_temp)
   year   PD  PD_thresh  y_pseudo
0  2010  0.5        0.7       0.0
1  2011  0.6        0.8       0.0
2  2013  0.9        0.9       1.0
3  2014  NaN        0.7       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...