Панды: добавить столбец на основе другого - PullRequest
0 голосов
/ 03 июля 2018

Я хочу добавить столбец на основе столбца 'mths_since_recent_revol_delinq', если mths_since_recent_revol_delinq равен нулю, тогда получить новый столбец, равный 1, и получить новый фрейм данных, например:

+----+--------------------------------+------------------------------------+
|    | mths_since_recent_revol_delinq | mths_since_recent_revol_delinq_add |
+----+--------------------------------+------------------------------------+
|  0 | NaN                            |                                  1 |
|  1 | 33                             |                                  0 |
|  2 | NaN                            |                                  1 |
|  3 | NaN                            |                                  1 |
|  4 | 57                             |                                  0 |
|  5 | 21                             |                                  0 |
|  6 | 60                             |                                  0 |
|  7 | NaN                            |                                  1 |
|  8 | 2                              |                                  0 |
|  9 | 24                             |                                  0 |
| 10 | NaN                            |                                  1 |
+----+--------------------------------+------------------------------------+

def label_race (df):
   if df['mths_since_recent_revol_delinq'].isnull():
      return 1
   else:
      return 0

Loan_a1['mths_since_recent_revol_delinq_add'] = Loan_a1.apply (lambda df: label_race(df),axis=1)

и трассировка:

----------------------------------------------- ---------------------------- AttributeError Traceback (самый последний вызов последний) в () ----> 1 Loan_a1 ['mths_since_recent_revol_delinq_add'] = Loan_a1.apply (лямбда-дф: label_race (df), ось = 1)

D: \ Program Files (x86) \ Anaconda3 \ lib \ site-packages \ pandas \ core \ frame.py в приложении (самостоятельно, func, ось, широковещательная, необработанная, уменьшенная, args, ** kwds) 4150
если уменьшение - Нет: 4151 уменьшение = Истина -> 4152 вернуть self._apply_standard (f, ось, уменьшить = уменьшить) 4153 остальное: 4154
вернуть self._apply_broadcast (f, ось)

D: \ Program Files (x86) \ Anaconda3 \ lib \ site-packages \ pandas \ core \ frame.py в _apply_standard (self, func, axis, ignore_failures, redu) 4246 try: 4247 для i, v в перечислении (series_gen): -> 4248 результатов [i] = func (v) 4249 keys.append (v.name) 4250 за исключением исключения как e:

дюйм (дф) ----> 1 Loan_a1 ['mths_since_recent_revol_delinq_add'] = Loan_a1.apply (лямбда-дф: label_race (df), ось = 1)

в label_race (df) 1 def label_race (df): ----> 2, если df ['mths_since_recent_revol_delinq']. Isnull (): 3 возврата 1 Еще 4: 5 возврат 0

AttributeError: ("У объекта" float "нет атрибута" isnull "", "произошло с индексом 0 ')

есть идеи как это исправить? Спасибо

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Следуя конструкции и определениям @ Jezrael и изящному трюку, что True * 1 = 1 и False * 1 = 0, вы можете получить тот же результат, используя (также назначьте):

Loan_a1.assign(results_key = lambda x:x[input_key].isnull() * 1)

Обратите внимание, что этот подход напрямую возвращает новый фрейм данных. Дальнейшее назначение не требуется

0 голосов
/ 03 июля 2018

Используйте isnull , а затем приведите результат к int с помощью astype :

Loan_a1 = pd.DataFrame({'mths_since_recent_revol_delinq': [np.nan, 33.0, np.nan, np.nan, 57.0, 21.0, 60.0, np.nan, 2.0, 24.0, np.nan]})

results_key = "mths_since_recent_revol_delinq_add"
input_key = "mths_since_recent_revol_delinq"
Loan_a1[results_key] = Loan_a1[input_key].isnull().astype(int)
print (Loan_a1)
    mths_since_recent_revol_delinq  mths_since_recent_revol_delinq_add
0                              NaN                                   1
1                             33.0                                   0
2                              NaN                                   1
3                              NaN                                   1
4                             57.0                                   0
5                             21.0                                   0
6                             60.0                                   0
7                              NaN                                   1
8                              2.0                                   0
9                             24.0                                   0
10                             NaN                                   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...