Функция расчета TWR (time weighted return)

def twr_eavaluate(df):
    
    """Ф-я рассчитывает time weighted return  по данным датафрейма ['AUM_DATE', 'POSITION_VALUE','NET_INPUT']

     AUM_DATE - колонка с датами
     POSITION_VALUE - оценочная  стоимость портфеля на дату
     NET_INPUT - вводы-выводы средств на дату (ввод - вывод)"""

    df.sort_values(by='AUM_DATE', inplace=True)

    # порфтель на  день-1
    prev_portf = [0] + df['POSITION_VALUE'].tolist()[:-1]
    df['prev_portf'] = prev_portf

    df['delta_for_twr'] = (df['POSITION_VALUE'] - df['NET_INPUT']) / df['prev_portf']

    # замена пропусков
    df = df.replace([np.inf, -np.inf], np.nan)
    df.dropna(axis=0, subset=['delta_for_twr'], inplace=True)
    twr = df['delta_for_twr'].prod() - 1
    return twr

Простая функция расчета TWR (time-weighted return) для определения эффективности вложений с учетом вводов и выводов средств