如何从Panel分配系列到DataFrame?

时间:2013-12-12 00:31:05

标签: pandas

我有一个小组

quotes_cc_returns
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 132 (major_axis) x 7 (minor_axis)
Items axis: VFINX to VWESX
Major_axis axis: 2001-01-31 00:00:00 to 2011-12-31 00:00:00
Minor_axis axis: Open to CC_Returns

我可以添加一个具有减法的列

quotes_premiums = quotes_cc_returns.transpose(2, 1, 0)

quotes_premiums['RiskPremium'] = quotes_premiums.CC_Returns.sub(ff_data_factors_subset.RF, axis=0)

但我无法添加带有简单作业的列

quotes_premiums['MktRiskPremium'] = ff_data_factors_subset.MktMinusRF

因为它返回此错误

Traceback (most recent call last):
  File "D:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 411, in <module>
  File "D:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 243, in calcRiskPremiums
  File "D:\Python27\Lib\site-packages\pandas\core\panel.py", line 668, in __setitem__
    raise AssertionError()
AssertionError:

ff_data_factors_subset.MktMinusRF是一个与quotes_premiums ['MktRiskPremium']具有相同长度和索引的系列。

谢谢,

JM

2 个答案:

答案 0 :(得分:1)

关键是使用.loc选择新系列应该去的项目和主轴。这是一个可以帮助您解决问题的示例。

In [16]: df = pd.DataFrame({"A": np.arange(6), 'B': ['one', 'one', 'two', 'two', 'one', 'one']})

In [17]: df
Out[17]: 
   A    B
0  0  one
1  1  one
2  2  two
3  3  two
4  4  one
5  5  one

[6 rows x 2 columns]

In [18]: wp = pd.Panel({'L1': df, 'L2': df})

In [19]: other = pd.Series(np.arange(1, 7))

所以只在项目'L1'中:

In [20]: wp.loc['L1', :, 'other'] = other

In [22]: wp['L1']
Out[22]: 
   A    B other
0  0  one     1
1  1  one     2
2  2  two     3
3  3  two     4
4  4  one     5
5  5  one     6

[6 rows x 3 columns]

答案 1 :(得分:0)

我已使用此代码解决了这个问题:

quotes_premiums['MktRiskPremium'] = 0.0
quotes_premiums['MktRiskPremium'] = quotes_premiums.MktRiskPremium.add(ff_data_factors_subset.MktMinusRF, axis=0)

JM