У меня есть следующий фрейм.
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.
Пожалуйста, помогите..
По существу вы ищете возможность поиска, что мы можем использовать map
в логической серии, поэтому следующее добавит булевский флаг
df_final['Flag'] = df_final['dish_name'].map(dish_specific_perf < 50)
Это работает, просматривая значение df по индексу серии и возвращая значение.
Затем вы можете преобразовать логические значения в нужный флаг:
df_final['Flag'] = np.where(df_final['Flag'], 'NP', 'Null')
df_final['dish_name'].map((dish_specific_perf > 50) & (dish_specific < 70))
Ваш оператор 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'
Это позволит избежать индексирования и выбора нескольких раз и легче поддерживать.
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')