【发布时间】:2018-06-26 06:14:08
【问题描述】:
我有一个时间序列 pandas 数据框,并且我计算了一个新列
df['std_series']= ( df['series1']-df['series1'].rolling(252).mean() )/ df['series1'].rolling(252).std()
但是,我想在标准化之前以滚动方式将 Winsorize 降低到 5% 的水平。因此,对于任何数据点,如果它在 5% 分位数之外,请回顾 252 天,然后将其剪裁到 5% 分位数,然后进行标准化。
我不知道如何使它与rolling.apply 一起工作。
例如(滚动 10 个元素):df = pd.DataFrame({'series1':[78, 1, 3, 4, 5, 6, 7, 8, 99]})
并假设我剪辑在(0.15 和0.85)。然后剪辑级别:(min=3.2, max=64)。
那么在标准化之前预期的winsorized窗口将是[ 64 3.2 3.2 4 5 6 7 8 64]
我发现的所有示例都是对数据框或整个列进行 winorize。
【问题讨论】:
-
最简单的方法是创建一个函数,将其映射到数据集中的每一天,并应用 Winsorization 和其他聚合度量。
-
如果您制作一个具有所需结果的小样本数据框会更好。也许尝试滚动窗口大小为 5 的 10 行。
标签: python pandas apply rolling-computation