gpt4 book ai didi

python - 按分位数_变换分组

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:58 24 4
gpt4 key购买 nike

假设我有一个 pandas 表,其中一列是股票行情,另一列是日期,我想对于每个日期,重新调整 yield 以遵循均匀分布。现在,sklearn.preprocessing 对此有一个完美的 quantile_transform 函数,但我似乎无法将其硬塞到 pandas tranform 或 应用功能,

强制性示例:

date        ticker volume percent_change
2018-01-01 A 10000 0.01
2018-01-01 AA 15000 0.002
2018-01-01 AAPL 20000 -0.01
2018-01-01 FB 10000 0.05
2018-01-02 A 10000 -0.01
2018-01-02 AA 15000 0.03
2018-01-02 AAPL 20000 -0.02
2018-01-02 FB 10000 -0.01

如果我想将每日返回标准化为 zscore,以下方法可以正常工作:

zscore = lambda x: (x - x.mean()) / x.std()
df['zscore'] = tsdf.groupby('date')['percent_change'].transform(zscore)

但是quantile_transform似乎更顽固。

最佳答案

试试这个:

In [216]: for n,g in df.groupby('date'):
...: df.loc[df['date']==n, 'zscore'] = \
quantile_transform(df.loc[df['date']==n, ['percent_change']]).ravel()


In [217]: df
Out[217]:
date ticker volume percent_change zscore
0 2018-01-01 A 10000 0.010 6.666667e-01
1 2018-01-01 AA 15000 0.002 3.333333e-01
2 2018-01-01 AAPL 20000 -0.010 1.000000e-07
3 2018-01-01 FB 10000 0.050 9.999999e-01
4 2018-01-02 A 10000 -0.010 5.005005e-01
5 2018-01-02 AA 15000 0.030 9.999999e-01
6 2018-01-02 AAPL 20000 -0.020 1.000000e-07
7 2018-01-02 FB 10000 -0.010 5.235235e-01

quantile_transform()期望 2D 数组作为输入 - 这就是我们需要方括号的原因:

df.loc[df['date']==n, ['percent_change']]
# ^ ^

它返回一个 2D 矩阵作为结果,因此我们需要将其展平 (.ravel())...

关于python - 按分位数_变换分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49239919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com