Как использовать операторы IF для классификации с несколькими условиями с Pandas - PullRequest
0 голосов
/ 08 октября 2019

У меня проблема с категоризацией. правило категоризации:

если Storage Condition == 'refrigerate' и 100 < profit Per Unit < 150 и Inventory Qty <20, то restock Action = 'Hold Current stock level'

else restock Action = 'On Sale'

вот набор данных, который мне нужно запуститьправила:

ID,Fruit,Stroage Condition,Profit Per Unit,In Season or Not,Inventory Qty,Restock Action
1,Apple ,room temperature ,20,Yes,200,
2,Banana,room temperature ,65,Yes,30,
3,Pear,refrigerate,60,Yes,180,
4,Strawberry,refrigerate,185,No,70,
5,Watermelon ,room temperature ,8,No,90,
6,Mango,Other,20,No,100,
7,DragonFruit,Other,65,No,105,

код, который я пробовал:

for i in range(len(df['ID'])):
    if df['Storage Condition'][i] == 'refrigerate' and df['Profit Per Unit'][i] >100 and df['Profit Per Unit'][i] <150 and df['Inventory Qty'][i]  <20:
        df['restock action'] = 'Hold Current stock level'

but i got this error message: 
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Может ли кто-нибудь помочь, пожалуйста? Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Использовать np.where :

c1=df['Stroage Condition'].eq('refrigerate')
c2=df['Profit Per Unit'].between(100,150)
c3=df['Inventory Qty']<20
df['Restock Action']=np.where(c1&c2&c3,'Hold Current stock level','On Sale')
print(df)

   ID        Fruit Stroage Condition  Profit Per Unit   In Season or Not  Inventory Qty  \
0   1        Apple  room temperature               20                Yes           200   
1   2       Banana  room temperature               65                Yes            30   
2   3         Pear       refrigerate               60                Yes           180   
3   4   Strawberry       refrigerate              185                 No            70   
4   5   Watermelon  room temperature                8                 No            90   
5   6        Mango             Other               20                 No           100   
6   7  DragonFruit             Other               65                 No           105   

  Restock Action  
0        On Sale  
1        On Sale  
2        On Sale  
3        On Sale  
4        On Sale  
5        On Sale  
6        On Sale  

В этом случае ни одна строка не проверяет 3 условия, поэтому для всех строк результат равенВ продаже

0 голосов
/ 08 октября 2019

Если вас не интересует производительность, можно использовать удобный метод apply. Он может взять вашу функцию и применить ее к строкам или столбцам в вашем фрейме данных.

Хорошо знать, как это работает, и минусы его использования, если вы планируете больше узнать о библиотеке панд.

Когда мне когда-нибудь захочется использовать pandas apply () в моем коде?

def func(df):
    if df['Stroage Condition'] == 'refrigerate' and 100 < df['Profit Per Unit'] < 150 and df['Inventory Qty'] < 20:
        return 'Hold Current stock level'
    else:
        return 'On Sale'

df['Restock Action'] = df.apply(func, axis='columns')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...