首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对滚动熊猫数据帧的子集进行规范化?

如何对滚动熊猫数据帧的子集进行规范化?
EN

Stack Overflow用户
提问于 2020-12-21 14:50:29
回答 1查看 133关注 0票数 2

所以我有一个满是股票行情的数据框架。他们是MultiIndexed by ticker,然后是date。我想要做的是,只对该数据子集的一个指标列进行标准化。例如,我想让A只根据滚动报价器A对ind1的滚动Zscore上的数据进行标准化,然后对报价器B进行同样的标准化,以此类推。我能够迭代地将这种标准化应用于数据帧的切片,但我正在寻找一种方法来轻松地应用这种滚动标准化,而不是按滚动条切片。

这是我正在使用的Zscore规范化,但我希望将其应用于数据帧中的每个节拍器子集,而无需切片,然后重新附加到新的数据帧。

代码语言:javascript
复制
df['normalizedInd1'] = (df['ind1'] - df['ind1'].rolling(30).mean()) / df['ind1'].rolling(30).std()

这是数据帧结构的一个示例

代码语言:javascript
复制
                  secid       ind1       ind2
ticker  date            
A   2011-01-03  101149.0    100792.5533  177960.0
    2011-01-04  101149.0    127658.3339  304624.0
    2011-01-05  101149.0    122648.9491  77050.0
B   2011-01-06  101150.0    110161.8415  151825.0
    2011-01-10  101150.0    112800.4117  378804.0
    2011-01-11  101150.0    79074.8645   525628.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-21 15:12:53

您可以尝试使用level=0ticker.groupby索引的第一列吗?然后,使用.groupby object g按组进行计算。我已从rolling(30)更改为rolling(2),因此会有以下输出:

代码语言:javascript
复制
g = df.groupby(level=0)['ind1'].rolling(2)
df['normalizedInd1'] = (df['ind1'] - g.mean().droplevel(0)) / g.std().droplevel(0)
df
Out[1]: 
                      secid         ind1      ind2  normalizedInd1
ticker date                                                       
A      2011-01-03  101149.0  100792.5533  177960.0             NaN
       2011-01-04  101149.0  127658.3339  304624.0        0.707107
       2011-01-05  101149.0  122648.9491   77050.0       -0.707107
B      2011-01-06  101150.0  110161.8415  151825.0             NaN
       2011-01-10  101150.0  112800.4117  378804.0        0.707107
       2011-01-11  101150.0   79074.8645  525628.0       -0.707107
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65388575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档