Я пытаюсь классифицировать данные на основе нескольких столбцов в пандах? - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть следующий фрейм данных new_correlation, который содержит следующий ввод

| Engagement Index | High Impact |
|------------------|-------------|
| 3.14             | 48.0        |
| 4.15             | 31.0        |
| 4.20             | 40.0        |

Мое состояние

def priority_driver(corr, high_impact):
    if corr > 0.4 & high_impact > 40:
        return 'Sustenance'
    elif corr > 0.4 & high_impact < 40:
        return 'Improvement'
    elif corr < 0.4 & high_impact > 40:
        return 'Distraction'
    elif corr < 0.4 & high_impact < 40:
        return 'Low Focus'

Я пытался new_correlation['Priority of action'] = new_correlation.apply(lambda x: priority_driver(x['Engagement Index'], x['High Impact']), axis =1)

Это дает мне

TypeError : («неподдерживаемые типы операндов для &: 'float' и 'float'", "произошли с индексом 0 ')

Требуемый выход:

| Engagement Index | High Impact | Priority of action |
|------------------|-------------|--------------------|
| 0.72             | 48.0        | Sustenance         |
| 0.74             | 31.0        | Improvement        |
| 0.78             | 40.0        | Sustenance         |

1 Ответ

1 голос
/ 11 декабря 2019

Обратите внимание, что есть также возможность сделать это с помощью numpy select, что будет выглядеть примерно так:

import pandas as pd 

df = pd.DataFrame({'A' : pd.np.random.choice([.2, .3, .4, .5, .6, .7], 200),                                       
                   'B' : pd.np.random.randint(30, 50, 200)})

conds = [ (df['A'] >= .4) & (df['B'] >= 40),
          (df['A'] >= .4) & (df['B'] < 40),
          (df['A'] <= .4) & (df['B'] >= 40),
          (df['A'] <= .4) & (df['B'] < 40) ]

cond_resp = ['Sustenance', 'Improvement', 'Distraction', 'Low Focus']

df['C'] = np.select(conds, cond_resp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...