Условные действия в панде DataFrame - PullRequest
1 голос
/ 11 декабря 2019

У меня есть панда данных, и я хочу установить значение в одном столбце на основе значения в другом столбце. Существует 6 возможных сценариев, поэтому один if / else не будет работать. Я не могу заставить комбинацию If / else работать со сценариями, где SBT равен> = x и <= y. Ниже приводится итерационный макрос в моем коде Excel VBA, который я пытаюсь воссоздать в Python. Он двигается вниз по каждому ряду, делая проверкуЯ знаю, что это может быть намного эффективнее в Python. </p>

If SBT > 3.6 Then
ActiveCell.Offset(0, -1) = "2"
ElseIf SBT >= 2.95 And SBT <= 3.6 Then
ActiveCell.Offset(0, -1) = "3"
ElseIf SBT >= 2.6 And SBT <= 2.95 Then
ActiveCell.Offset(0, -1) = "4"
ElseIf SBT >= 2.05 And SBT <= 2.6 Then
ActiveCell.Offset(0, -1) = "5"
ElseIf SBT >= 1.31 And SBT <= 2.05 Then
ActiveCell.Offset(0, -1) = "6"
ElseIf SBT < 1.31 Then
ActiveCell.Offset(0, -1) = "7"
Else
End If

Я смотрел на

np.where(a < 4, -1, 100)

и

df['desired_output'] = df['data'].apply(lambda x: 'true' if x <= 2.5 else 'false')

Являются ли какие-либо из этих жизнеспособных вариантов? Как мне разместить вложенные операторы (особенно части «между этими значениями», или есть ли другой более эффективный способ сделать это? Фрагмент приведенных ниже данных (SBT) и ожидаемый результат (SBTno).

SBT   SBTn
7.00    2
1.28    7
3.64    2
2.97    3
2.83    4

1 Ответ

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

Вот один путь от cut

s=pd.cut(df.SBT,bins=[0,1.31,2.05,2.6,2.95,3.6,np.Inf],labels=[7,6,5,4,3,2])
0    2
1    7
2    2
3    3
4    4
df['SBTn']=s.astype(str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...