Функция расчета 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) для определения эффективности вложений с учетом вводов и выводов средств

Перевод категориальных признаков датафрейма в бинарные

номер город колич. признак
0 2 москва 1
1 3 питер 2
2 4 саратов 3
3 5 москва 4
4 6 питер 3
5 7 москва 4
6 8 сыктывкар 5
7 9 саратов 6

москва питер саратов сыктывкар
0 1.0 0.0 0.0 0.0
1 0.0 1.0 0.0 0.0
2 0.0 0.0 1.0 0.0
3 1.0 0.0 0.0 0.0
4 0.0 1.0 0.0 0.0
5 1.0 0.0 0.0 0.0
6 0.0 0.0 0.0 1.0
7 0.0 0.0 1.0 0.0

номер город колич. признак москва питер саратов сыктывкар
0 2 москва 1 1.0 0.0 0.0 0.0
1 3 питер 2 0.0 1.0 0.0 0.0
2 4 саратов 3 0.0 0.0 1.0 0.0
3 5 москва 4 1.0 0.0 0.0 0.0
4 6 питер 3 0.0 1.0 0.0 0.0
5 7 москва 4 1.0 0.0 0.0 0.0
6 8 сыктывкар 5 0.0 0.0 0.0 1.0
7 9 саратов 6 0.0 0.0 1.0 0.0

О формате сохранения данных HDF

pandas hdfstore

Долгое время лелеял себя надеждой, что смогу построить  эффективную базу данных в формате  HDF. А что?  Очень быстрая, прекрасно интегрируется с pandas — что еще нужно, если основные операции завязаны на pandas?

Проблема в одном — при попытке вносить изменения  в таблицы база начинает неконтролируемо расти. Даже при повторном сохранении одногиговой базы,  в которую не было добавлено ни одной строчки, файл, ничтоже сумняшеся, прибавляет в весе 150-200 мегабайт.  Облазил документацию и стаковерфлоу в поисках правильного рецепта приготовления HDF, но не преуспел.

И только недавно наткнулся на дельный совет — не старайтесь использовать hdf как базу данных. Этот формат отлично приспособлен для быстрого сохранения большого датафрейма и быстрого же его чтения, но  апдейт — не про него.

Плюнул я на все эти свои эксперименты и вернулся к старому доброму SQL.