在下面的數據框中,我想在每個符號中使用相同的最小值和最大值來縮放 Open、High、Low、Close。我可以用下面的代碼做到這一點,但是有沒有一種合理的方法可以用 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 回答

www說
TA貢獻1775條經驗 獲得超8個贊
為了回答我自己的問題,下面的代碼似乎可以工作,但我不確定這是否真的是“正確”的方法:
df.set_index(['Timestamp', 'Symbol', 'Volume'], inplace=True)
df = df.stack().to_frame().groupby('Symbol').apply(SklearnWrapper(MinMaxScaler()))[0].unstack().reset_index()
我從Apply multiple StandardScaler's to individual groups 中獲得了 SklearnWrapper?
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)```
添加回答
舉報
0/150
提交
取消