условное форматирование в датафрейме с использованием python - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть фрейм данных pandas, и мне нужно классифицировать его на основе указанного условия. Порог является фиксированным, и его следует классифицировать на основе 8 различных комбинаций порога.

Threshold (A => 7, B = 3 or 4, C = between 22 - 27) 

Я пытался использовать панд с условными операциями для классификации данных, но это приводит к вводящим в заблуждение результатам.

Условия:

1. class1=f[(f['A']>7.0)&((f['B']==3.0)|(f['B']==4.0))& ((f['C']>=22.0)&(f['C']<=27.0))]
2. class2=f[(f['A']>7.0)&((f['B']==3.0)|(f['B']==4.0))& ((f['C']<=22.0)&(f['C']>=27.0))]
3. class3=f[(f['A']<7.0)&((f['B']==3.0)|(f['B']==4.0))& ((f['C']>=22.0)&(f['C']<=27.0))]
4. class4=f[(f['A']>7.0)&((f['B']!=3.0)&(f['B']!=4.0))& ((f['C']>=22.0)&(f['C']<=27.0))]
5. class5=f[(f['A']>7.0)&((f['B']!=3.0)&(f['B']!=4.0))& ((f['C']<=22.0)&(f['C']>=27.0))]
6. class6=f[(f['A']<7.0)&((f['B']==3.0)|(f['B']==4.0))& ((f['C']<=22.0)&(f['C']>=27.0))]
7. class7=f[(f['A']<7.0)&((f['B']!=3.0)&(f['B']!=4.0))& ((f['C']>=22.0)&(f['C']<=27.0))]
8. class8=f[(f['A']<7.0)|((f['B']!=3.0)&(f['B']!=4.0))| ((f['C']<=22.0)&(f['C']>=27.0))]

Мне нужно, чтобы все строки во фрейме данных были классифицированы на основе условий.

1 Ответ

0 голосов
/ 03 апреля 2019

Ваша ситуация : ваш фрейм данных называется f и содержит 3 столбца с числовыми значениями.Столбцы называются 'A', 'B' и 'C'.

Я рекомендую делать это, создавая логические столбцы и комбинируя их в соответствии с вашими классами.Вероятно, есть еще много способов сделать это, также намного более изящные.Я думаю, что это решение так же просто, как они получают.По сути, у вас есть три условия, которые могут быть выполнены:

check_a = f['A'] >= 7
check_b = (f['B'] == 3) | (f['B'] == 4)
check_c = (22 <= f['C'] <= 27)

Комбинируя эти 3 проверки, вы получите 8 вариантов (~ отрицает логические значения, поэтому в основном переворачивает их значения):

f['class_1'] =  check_a &  check_b &  check_c
f['class_2'] =  check_a &  check_b & ~check_c
f['class_3'] = ~check_a &  check_b &  check_c
f['class_4'] =  check_a & ~check_b &  check_c
f['class_5'] =  check_a & ~check_b & ~check_c
f['class_6'] = ~check_a &  check_b & ~check_c
f['class_7'] = ~check_a & ~check_b &  check_c
f['class_8'] = ~check_a & ~check_b & ~check_c

Одна из причин, по которой ваш код не работает, заключается в том, что вы проверяете, являются ли значения в столбце 'C' меньше 22 и больше 27. Это никогда не может быть правдой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...