Условный w / Pandas Dataframe

1

Нужна помощь с условностями для фрейма данных pandas. Извините заранее за основной вопрос или если он будет рассмотрен в другом месте.

Здесь примерный кадр:

employee sales revenue salary
12345    20    10000   100000 

У меня есть несколько условий, основанных на данных, которые приведут к изменению зарплаты.

сценарии: если продажи> 10 и доход> 5 000 долларов США, увеличьте зарплату на 20%, если продажи <5 и доход> 5 000 долларов США, в противном случае увеличьте зарплату на 10%, ничего не сделайте.

variables:
high_sales = 10
low_sales = 5
high_revenue = 5000
big_increase = 1.2
small_increase = 1.1

Я знаю, что это требует некоторого гнездования, но мне не ясно, как это сделать.

Я хочу, чтобы результат был файловым кадром с корректировкой только столбца зарплаты.

Здесь код:

df['salary'] = np.where((df['sales']>=high_sales & df['revenue'] 
>=high_revenue), df['salary'] * big_increase, (df['sales']<=low_sales & 
df['revenue'] >=high_revenue), df['salary'] * small_increase, df['sales'])

Это правильно?

  • 0
    Вот почему я не должен пытаться редактировать форматирование с моего телефона. Извините, что все испортил Пожалуйста, возьмите «вот код» из нижнего блока кода, чтобы исправить выделение строки.
Теги:
pandas
dataframe
if-statement
conditional

1 ответ

1

С несколькими условиями лучше использовать np.select а не np.where:

conds = [(df.sales > 10) & (df.revenue > 5000),
         (df.sales < 5) & (df.revenue > 5000)]

choices = [df.salary * 1.2, df.salary * 1.1]

df['salary'] = np.select(conds, choices, default = df.revenue)
  • 2
    Лучше, по моему мнению: df['salary'] *= np.select(conds, [1.2, 1.1], 1) .
  • 1
    Да, возможно, это немного приятнее, спасибо за указание на это!
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню