Выводы по финансовому анализу в датафрейме pandas при срабатывании определенных событий или значений
у меня есть датафрейм с различными показателями. Необходимо сформировать новую колонку с комментариям, если какое-либо значение выходит за определенные рамки. df_ratio:
Name OGRN Sales Equity Debt Net_profit ER Sales_dyn fin_gearing
Lutik 1234 200 5 10 3 0.001 -0.1 0.5
Pestik 2345 1000 35 20 -10 0.5 0.3 3
Cvet 3456 260 10 0 2 -5 -0.3 -0.4
Drev 4567 350 40 5 10 0.3 0.2 0.3
Пытался создать функцию, которая проходит по датафрейму и при обнаружении критических показателей пишет соответствующие комментарии в новую колонку:
Критические значения:
df_ratio['ER'] < 0.05 - ER is poor
df_ratio['ER'] < 0 - Negative equity
df_ratio['Net_profit'] < 0 - Lossess
df_ratio['fin_gearing'] > 1 - High debt level
df_ratio['Sales_dyn'] < 0 Sales dropped
Если не одно из вышеперечисленных условий не срабатывает то Комментарии Sound Financial position
Сперва пытался загнать все функцию и через цикл пройтись по всем колонкам и если что-то срабатывает, то делать append в пустой лист через форматирование строки f"". Но все не так :((( Запутался!!!
Каким необходимо видеть итоговый df df_ratio:
Name OGRN Sales Equity Debt Net_profit ER Sales_dyn fin_gearing Comments
Lutik 1234 200 5 10 3 0.001 -0.1 0.5 ER is poor 0.001(Equity=5),
Sales droped -0.1(Sales=200)
Pestik 2345 1000 35 20 -10 0.5 0.3 3 Losses -10, High debt
level 3 (Debt=20)
Cvet 3456 260 10 0 2 -5 -0.3 -0.4 Negative equity -5
Sales droped -0.3 (Sales=260)
Drev 4567 350 40 5 10 0.3 0.2 0.3 Sound financial position
Буду признателен за помощь
Ответы (1 шт):
У меня как-то так получилось:
def neg_comments(df):
comment = []
if df['ER'] < 0.05 and df['ER'] > 0:
comment.append(f"ER is poor: {df['ER']"}
elif df['ER'] < 0:
comment.append(f"Negative equity: {df['ER']"}
if df['Net_profit'] <0:
comment.append(f"Losses {df['Net_profit']"}
if df['fin_gearing'] > 1:
comment.append(f"High debt level {df['fin_gearing']"}
if df['Sales_dyn'] < 0:
comment.append(f"Sales dropped by {df['Sales_dyn']"}
df['Comments'] = ', '.join(comment)
return df
df_ratio = df_ration.apply(neg_comments, axis=1)