как извлечь элемент серии pandas и сравнить его со строками в столбце dataframe

1

У меня есть следующий фрейм.

     coupon_type     dish_id  dish_name   dish_price  dish_quantity
0     Rs 20 off       012      Sandwich     65            2
1     Rs 20 off       013       Chicken     125           3
2     Rs 20 off       013       Chicken     125           3
3     Rs 20 off       013       Chicken     125           3

    ratings    reviews      coupon_type  user_id order_id  meals order_area
    4     blah blah blah   Rs 20 off      9       9         5     London
    4     blah blah blah   Rs 20 off      9       9         5     London
    3     blah blah blah   Rs 20 off      9       9         5     London
    4     blah blah blah   Rs 20 off      9       9         5     London  

Я делаю группу по столбцу dish_name.

df_dish_name = df_final.groupby('dish_name')

Затем я выполняю некоторые операции отношения по группе.

Что дает мне следующую серию pandas, которую я храню в dish_specific_perf

dish_name
Chicken       45.000000
Sandwich      61.111111

Затем я проверяю одно условие в цикле if.

if((dish_specific_perf < 50).any() == True):

Если условие истинно, то я хочу добавить строку ( "NP" ) к соответствующему имени табуляции в dataframe. Итак, в dataframe это должно выглядеть так.

 coupon_type     dish_id  dish_name   dish_price  dish_quantity
0     Rs 20 off       012      Sandwich     65            2
1     Rs 20 off       013       Chicken     125           3
2     Rs 20 off       013       Chicken     125           3
3     Rs 20 off       013       Chicken     125           3

    ratings    reviews      coupon_type  user_id order_id  meals order_area
    4     blah blah blah   Rs 20 off      9       9         5     London
    4     blah blah blah   Rs 20 off      9       9         5     London
    3     blah blah blah   Rs 20 off      9       9         5     London
    4     blah blah blah   Rs 20 off      9       9         5     London  

  Flag
  Null
  NP
  NP
  NP

Проблема с этим заключается в том, как сравнить элементы серии с столбцом data_name dataframe, чтобы проверить, существует ли курица или нет?

когда я делаю

dish_specific_perf[0]  

Это просто дает мне число, равное 45.

Пожалуйста, помогите..

  • 1
    Затем IIUC вы можете сделать df_final['Flag'] = df_final['dish_name'].map(dish_specific_perf < 50) это установит флаг в True или False , затем вы можете установить их в NP / Null, как вам df_final['Flag'] = np.where(df_final['Flag'], 'NP', 'Null')
  • 0
    @EdChum Именно то, что я ищу .. Большое спасибо ..;)
Теги:
pandas
series

2 ответа

2
Лучший ответ

По существу вы ищете возможность поиска, что мы можем использовать map в логической серии, поэтому следующее добавит булевский флаг

df_final['Flag'] = df_final['dish_name'].map(dish_specific_perf < 50)

Это работает, просматривая значение df по индексу серии и возвращая значение.

Затем вы можете преобразовать логические значения в нужный флаг:

df_final['Flag'] = np.where(df_final['Flag'], 'NP', 'Null')
  • 0
    мы можем иметь два условия на карте? `df_final ['dish_name']. map (dish_specific_perf> 50 & dish_specific <70)`
  • 0
    да, это сработает, но вам нужно обернуть скобки вокруг условий из-за приоритета оператора: df_final['dish_name'].map((dish_specific_perf > 50) & (dish_specific < 70))
Показать ещё 4 комментария
0

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

for name, group in df_dish_name:
    # Whatever awesome thing you are doing, which give you the ratio...

    if ratio < 50:
        df_final.loc[df_final['dish_name']==name, 'Flag'] = 'NP'

Это позволит избежать индексирования и выбора нескольких раз и легче поддерживать.

  • 0
    Он устанавливает все соответствующие строки, чтобы быть NP .. Я хочу, чтобы только те строки были установлены NP, которые верны для условия if ..
  • 0
    Исходя из вашего вопроса, я догадался, что вы хотите установить все строки, где совокупный коэффициент группы будет меньше 50.

Ещё вопросы

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