我很难规范化大熊猫"数据"像这样的小组:
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,但找不到使用这种配置的方法(除以面板的一部分);使用简单的标量除法两种方法都可以正常工作。答案 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
我希望有所帮助!