Я пытаюсь создать вычисляемый столбец в кадре данных pandas, который выполняет другой расчет на основе другого столбца в кадре данных.
Сначала я попробовал:
df_rollup['modeled_days'] = abs(round(((df_rollup.risk_avg) - 31) / (master_weight /100) / (prod_tolerance / 100), 0)).where(df_rollup['completion_status'] == 'PRODUCING')
df_rollup['modeled_days'] = abs(round(((df_rollup.risk_avg) - 31) / (master_weight / 100) / (shutin_tolerance / 100), 0)).where(df_rollup['completion_status'] == 'SHUT IN')
df_rollup['modeled_days'] = abs(round(((df_rollup.risk_avg) - 31) / (master_weight / 100) / (abandoned_tolerance / 100), 0)).where(df_rollup['completion_status'].str.contains('ABANDONED'))
Я быстро понял, что это перезапишет каждую строку с последним вычислением обновлений и заменит несоответствующие строки на Nan.
Итак, я исследовал другой подход, который, как мне кажется, находится на правильном пути, но я получаю сообщение об ошибке: ValueError: Истинное значение Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().
Это мой подход:
def production_type_calc(df_rollup, master_weight, prod_tolerance, shutin_tolerance, abandoned_tolerance):
if df_rollup['completion_status'] == 'PRODUCING':
return abs(round((df_rollup.risk_avg - 31) / (master_weight / 100) / (prod_tolerance / 100), 0))
elif df_rollup['completion_status'] == 'SHUT IN':
return abs(round((df_rollup.risk_avg - 31) / (master_weight / 100) / (shutin_tolerance / 100), 0))
elif df_rollup['completion_status'].str.contains('ABANDONED'):
return abs(round((df_rollup.risk_avg - 31) / (master_weight / 100) / (abandoned_tolerance / 100), 0))
else:
return 0
Я запускал эту функцию, используя этот метод .apply как таковой:
df_rollup['modeled_days'] = df_rollup.apply(production_type_calc(df_rollup, master_weight, prod_tolerance, shutin_tolerance, abandoned_tolerance), axis=1)
Я уже сталкивался с этой проблемой раньше, и мне кажется, что мне нужно вложить фрейм данных, например, df = df [df [' '] или что-то в этом роде, но я не знаю, с чего начать. Буду признателен за любую помощь в этом.