Предположим, у меня есть два фрейма данных - условия и данные.
import pandas as pd
conditions = pd.DataFrame({'class': [1,2,3,4,4,5,5,4,4,5,5,5],
'primary_lower': [0,0,0,160,160,160,160,160,160,160,160,800],
'primary_upper':[9999,9999,9999,480,480,480,480,480,480,480,480,4000],
'secondary_lower':[0,0,0,3500,6100,3500,6100,0,4800,0,4800,10],
'secondary_upper':[9999,9999,9999,4700,9999,4700,9999,4699,6000,4699,6000,3000],
'group':['A','A','A','B','B','B','B','C','C','C','C','C']})
data = pd.DataFrame({'class':[1,1,4,4,5,5,2],
'primary':[2000,9100,1100,170,300,210,1000],
'secondary':[1232,3400,2400,380,3600,4800,8600]})
Я хотел бы создать новый столбец (группу) в таблице "данных", который назначает группу для каждой строки с учетом условийприведено в таблице «условия».
Таблица условий структурирована таким образом, что строки в каждой группе объединяются с помощью «ИЛИ», а столбцы - с «И».Например, для присвоения группы «B»:
(класс = 4 И 160 <= основной <= 480 И 3500 <= дополнительный <= 4700) </p>
ИЛИ
(класс = 4 И 160 <= основной <= 480 И 6100 <= вторичный <= 9999) </p>
ИЛИ
(класс = 5 И 160 <= основной <= 480 И 3500 <= вторичный <= 4700) </p>
ИЛИ
(класс = 5 И 160 <= первичный <= 480 И 6100 <= вторичный <= 9999) </p>
Любые строки, которые не имеютНи одному из условий не будет присвоена группа «Другое».Итак, итоговый фрейм данных будет выглядеть так:
+-------+---------+-----------+-------+
| class | primary | secondary | group |
+-------+---------+-----------+-------+
| 1 | 2000 | 1232 | A |
| 1 | 9100 | 3400 | A |
| 4 | 1100 | 2400 | Other |
| 4 | 170 | 380 | C |
| 5 | 300 | 3600 | B |
| 5 | 210 | 4800 | C |
| 2 | 1000 | 8600 | A |
+-------+---------+-----------+-------+