2017-03-18 19 views
0

は、私は、次のパネルがstocksと呼ばれています:Pandasパネルのアイテム間にワンショットで列を追加しますか?

Dimensions: 2 (items) x 1681 (major_axis) x 5 (minor_axis) 
Items axis: AAPL to OPK 
Major_axis axis: 2010-01-04 00:00:00 to 2016-09-07 00:00:00 
Minor_axis axis: Open to Volume 

項目軸は株式の名前で構成されており、Minor_axisは、「開く」、「閉じる、などの特定の株式のための多くの属性列で構成します'Volume'など

[Log_Return]という名前の新しい列(属性)をすべての項目(株)に同時に追加しようとしています。

私はそれの次とバリエーションを試してみましたが、私は

同様

for i in stocks: 
    stocks.i['Log_Return']= np.log(stocks.loc[i,:, 'Close'] /stocks.loc[i,: ,'Close']) 
を反復使用してみましたそして、このエラーを得た

stocks[:]['Log_Return'] = np.log(stocks.loc[:,:, 'Close']/stocks.loc[:,:, 'Close'].shift(1)) 
#This created an additional item instead of a column in minor_axis 

stocks['AAPL':'OPK']['Log_Return'] = np.log(stocks.loc[:,:, 'Close']/stocks.loc[:,:, 'Close'].shift(1)) 

#This didn't do anything; no errors but no changes being made to my panels as well 


# AAPL and OPK are the only stocks in the items axis and are equivalent to the ':', in the right 
hand side of the equation. 

私のパネルに行われて何の変更もないように思わました'Panel' object has no attribute 'i'

stocks.AAPL 
       Open High  Low Close  Volume 
Date               
2010-01-04 30.49 30.64 30.34 30.57 123432050.0  
2010-01-05 30.66 30.80 30.46 30.63 150476004.0  
2010-01-06 30.63 30.75 30.11 30.14 138039594.0  
2010-01-07 30.25 30.29 29.86 30.08 119282324.0  
2010-01-08 30.04 30.29 29.87 30.28 111969081.0  
2010-01-11 30.40 30.43 29.78 30.02 115557365.0  


stocks.OPK 
      Open High Low Close  Volume 
Date            
2010-01-04 1.80 1.97 1.76 1.95 234455.0 
2010-01-05 1.64 1.95 1.64 1.93 135712.0 
2010-01-06 1.90 1.92 1.77 1.79 546586.0 
2010-01-07 1.79 1.94 1.76 1.92 138622.0 
2010-01-08 1.92 1.94 1.86 1.89 62425.0 
2010-01-11 1.90 1.95 1.89 1.91 130195.0 

私は簡単な間違いをしているように感じますが、今日私の頭を真っ直ぐに考えてください。

答えて

1

解決策の1つは、パネルオブジェクトのitemsを反復することです。あなたのケースではstocksの代わりにstocks.itemsを繰り返します。ここに一般的な例があります。

import pandas as pd 
import numpy as np 
p = pd.Panel(np.random.randn(2, 5, 2), items=['Item1', 'Item2'],major_axis=pd.date_range('1/1/2000', periods=5), minor_axis=['A', 'B']) 
for i in p.items: 
    p[i]['C'] = p[i]['A']+p[i]['B'] 
print p['Item1'] 
print p['Item2'] 

# reindex to new minor axis 
p = p.reindex_axis(['A', 'B', 'C'], 'minor_axis') 
print p.minor_axis 

results in 

        A   B   C 
2000-01-01 -0.442373 0.842567 0.400194 
2000-01-02 0.668583 1.809871 2.478454 
2000-01-03 0.979304 1.022991 2.002295 
2000-01-04 0.910955 0.282959 1.193914 
2000-01-05 1.265542 -1.626789 -0.361247 
        A   B   C 
2000-01-01 -0.635350 -0.138817 -0.774166 
2000-01-02 -0.573246 0.731871 0.158625 
2000-01-03 -0.027341 1.033315 1.005974 
2000-01-04 -1.152284 0.210650 -0.941634 
2000-01-05 -0.504819 0.682751 0.177933 

Index([u'A', u'B', u'C'], dtype='object') 
+0

ありがとうございました。できます!私はそれが私が行方不明だったことが分かっていた。 =) – Moondra

+0

奇妙なのは、在庫を印刷するときに.APPL、私は列が追加されているのを見ますが、 'stocks.minor_axis'で確認すると、それはリストには表示されません。 'Index(['Open'、 'High'、 'Low'、 'C​​lose'、 'Volume']、dtype = 'object') ' – Moondra

+1

パネルを再インデックスする必要があります。新しい編集をご覧ください。助けてくれることを望む。 – plasmon360

関連する問題