规范化pandas面板(将所有值除以第一个切片)

时间:2017-01-05 16:38:52

标签: python pandas panel divide normalize

我很难规范化大熊猫"数据"像这样的小组:

In[23]:data Out[23]: <class 'pandas.core.panel.Panel'> Dimensions: 6 (items) x 252 (major_axis) x 4 (minor_axis) Items axis: Open to Adj Close Major_axis axis: 2011-01-03 00:00:00 to 2011-12-30 00:00:00 Minor_axis axis: AAPL to XOM

基本上,我希望将所有值除以另一个仅包含第一个&#34;切片&#34;原始面板(所有&#39;项目&#39;和&#39; minor_axis&#39;的第一个值):

In[25]:data[:,:1,:] Out[25]: <class 'pandas.core.panel.Panel'> Dimensions: 6 (items) x 1 (major_axis) x 4 (minor_axis) Items axis: Open to Adj Close Major_axis axis: 2011-01-03 00:00:00 to 2011-01-03 00:00:00 Minor_axis axis: AAPL to XOM

结果应该是与原始尺寸相同的面板,所有值除以相应的第一个(第一个日期)。

谢谢和问候。

PD:我已经按照其他帖子尝试了.apply和.divide,但找不到使用这种配置的方法(除以面板的一部分);使用简单的标量除法两种方法都可以正常工作。

1 个答案:

答案 0 :(得分:0)

这是我在StackOverflow上的第一个答案,所以希望这是有帮助的。我遇到了同样的问题,但是我使用的是带有多索引的Dataframe对象而不是pandas面板对象。您应该能够通过以下方式获得所需的效果:将数据框与较小的数据框合并,只选择每个股票的第一个日期。

这是一些虚拟代码。

假设您的完整数据框是'df',其中包含由两列['ticker','period']组成的多索引。在该数据框中是一列['价格']。

以下是你如何做你想做的事。

df_slice = df[df.reset_index()['period'] == '2017-01-01']
df_merged = pd.merge(df.reset_index(), df_slice, how='inner', on='ticker')
df_merged['price_normalized'] = df_merged.price_x/df_merged.price_y

我希望有所帮助!