我有一个小组,
In [14]: print electr
<class 'pandas.core.panel.Panel'>
Dimensions: 35 (items) x 6 (major_axis) x 10 (minor_axis)
Items axis: AN to WB
Major_axis axis: Coal to Total Renewable Energy Sources
Minor_axis axis: 2003-01-31 00:00:00 to 2013-01-31 00:00:00
我想要做的是在第一个时间步将值规范化为总和(沿 major_axis ),即我想做
normed = electr / electr.sum(axis=1).ix[0]
但是,这会导致错误 ValueError:Panel的简单算术只能使用标量值。
我的问题:执行此操作的规范方法是什么?
答案 0 :(得分:2)
您需要Panel.apply
(需要0.14.0),请参阅此处:http://pandas.pydata.org/pandas-docs/stable/basics.html#applying-with-a-panel。
In [8]: p = Panel(np.arange(3*4*5).reshape(3,4,5),items=['ItemA','ItemB','ItemC'],major_axis=date_range('20130101',periods=4),minor_axis=list('ABCDE'))
In [9]: p
Out[9]:
<class 'pandas.core.panel.Panel'>
Dimensions: 3 (items) x 4 (major_axis) x 5 (minor_axis)
Items axis: ItemA to ItemC
Major_axis axis: 2013-01-01 00:00:00 to 2013-01-04 00:00:00
Minor_axis axis: A to E
In [10]: d = p.sum(axis=1).ix[0]
In [11]: d
Out[11]:
ItemA 30
ItemB 110
ItemC 190
Name: A, dtype: int64
In [12]: p.iloc[0]
Out[12]:
A B C D E
2013-01-01 0 1 2 3 4
2013-01-02 5 6 7 8 9
2013-01-03 10 11 12 13 14
2013-01-04 15 16 17 18 19
In [13]: p.apply(lambda x: x/d,axis=0).iloc[0]
Out[13]:
A B C D E
2013-01-01 0.000000 0.033333 0.066667 0.100000 0.133333
2013-01-02 0.166667 0.200000 0.233333 0.266667 0.300000
2013-01-03 0.333333 0.366667 0.400000 0.433333 0.466667
2013-01-04 0.500000 0.533333 0.566667 0.600000 0.633333