Масштабирование нескольких столбцов в кадре данных с одним и тем же препроцессором в SciKit Learn - PullRequest
2 голосов
/ 22 января 2020

В приведенном ниже кадре данных я хочу масштабировать Open, High, Low, Close с одинаковыми значениями min и max в каждом символе.

Я могу сделать это с помощью следующего кода, но есть ли разумный способ реализовать это с препроцессорами SciKit Learn?

df = pd.DataFrame([[1, 'A', 10, 11, 9, 9, 100],
                   [2, 'A', 9, 13, 9, 12, 150],
                   [3, 'A', 12, 15, 11, 15, 130],
                   [1, 'B', 90, 95, 90, 92, 10],
                   [2, 'B', 92, 93, 84, 85, 13],
                   [3, 'B', 85, 88, 81, 83, 11]],
                  columns=['Timestamp', 'Symbol', 'Open', 'High', 'Low', 'Close', 'Volume'])

df.set_index(['Timestamp', 'Symbol', 'Volume'], inplace=True)
((df.stack() - df.stack().groupby('Symbol').min()) / (df.stack().groupby('Symbol').max() - df.stack().groupby('Symbol').min())).unstack().reset_index(['Volume'])

1 Ответ

0 голосов
/ 23 января 2020

Чтобы ответить на мой собственный вопрос, похоже, что следующий код будет работать, но я не уверен, действительно ли это «правильный» способ сделать это:

df.set_index(['Timestamp', 'Symbol', 'Volume'], inplace=True)
df = df.stack().to_frame().groupby('Symbol').apply(SklearnWrapper(MinMaxScaler()))[0].unstack().reset_index()

Я получил SklearnWrapper от Применить несколько StandardScaler к отдельным группам?

import typing
import pandas as pd

class SklearnWrapper:
    def __init__(self, transform: typing.Callable):
        self.transform = transform

    def __call__(self, df):
        transformed = self.transform.fit_transform(df.values)
        return pd.DataFrame(transformed, columns=df.columns, index=df.index)```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...