Как применить функцию групповой прокрутки для создания нескольких столбцов в кадре данных - PullRequest
1 голос
/ 01 февраля 2020

Я настраиваю серию профиля объема поверх данных запаса. Я реализовал код профиля рынка из этого репозитория github , а ссылка на данные находится здесь , а пример здесь . Пример данных приведен здесь:

Timestamp          Close    High    Low     Open    Volume
2017-09-27 06:30:00 927.74  927.74  927.74  927.74  14929
2017-09-27 07:00:00 933.0   935.53  928.47  928.745 136776
2017-09-27 07:30:00 932.365 934.0   930.065 932.98  73146
2017-09-27 08:00:00 932.39  933.14  930.3   932.45  56624
2017-09-27 08:30:00 934.8675 935.62 931.1495 932.15 74960
2017-09-27 09:00:00 934.325 935.96  933.6 935.2308  62358
2017-09-27 09:30:00 935.48  935.7   933.56  934.36  45043
2017-09-27 10:00:00 935.5   935.56  933.71  935.385 32434
2017-09-27 10:30:00 935.96  936.86  935.21  935.5   58203

Здесь автор получает вывод, применяя функцию к фрагменту строк индекса и применяя основную функцию, применяя этот код:

mp = MarketProfile(df, tick_size=1)
mp_slice = mp[df.index.max() - pd.Timedelta(13, 'H'):df.index.max()]

Здесь функция берет фрагмент индексов из целого фрейма данных и применяет свою функцию к этому фрагменту, и автор получает окончательные результаты с помощью этого кода:

mp_slice.as_dict()

Я хочу сделать из rolling(w) индексирует и применяет эту функцию ко всему фрейму данных в pandas индекса и создает новые столбцы в фрейме данных с начальной даты. т.е. df['poc_price'], df['value_area'], df[initail_balane'] .et c. (все, что включает в себя вывод функции as_dict ()).

Я перепробовал много кодов, но, несмотря на то, что ничего не получилось, я получил желаемый результат. Мой наименьший код:

def make_marketprofile(df, window=50, mode='vol', tick_size=1):
    for i in range (0, df.shape[0] - window - 1):
    try:
        mpt = MarketProfile(df[i:i+window], mode=mode, tick_size=0.5)
        mpt_slice = mpt[df[i:i+window].index.min() : 
                    df[i:i+window].index.max()].as_dict()
    except KeyError:
        print('error: {}'.format(df_1['Date'][i+window]))
#        for key, value in mpt_slice():
    df.iloc[i+window] = mpt_slice #value
    try:
         df.drop(['Date'], axis = 1, inplace = True)
    except AttributeError:
         pass
    for column in df:
    df[column][1:] = pd.to_numeric(df[column][1:])
    df = df.iloc[window:]
    df.fillna(method = 'ffill', inplace = True)
return df

, но он выдает ошибку значения:

ValueError: Must have equal len keys and value when setting with an iterable

Так что моя проблема состоит в основном из 2 частей:

1- To make a rolling and resample function to apply the market profile function over the dataframe
2- the function makes the outputs in a python dictionary and i want to make new columns as per the dictionary objects.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...