df.drop(col,axis=1) を使用して列を削除する multiindex データフレームがあります。次に、column.levels[0] を調べて、すべての列に対していくつかの操作を行っています。ただし、これを実行しようとすると、pandas は column.levels から削除されていないため、削除された列を探します。これはバグですか?戦争はありますか?
ここに私が取り組んでいるdfがあります:
^GSPC PF
Adj Close Adj Close
Date
2013-04-22 1562.50 4023.45
2013-04-23 1578.78 4099.20
2013-04-24 1578.79 4094.70
2013-04-25 1585.16 4124.25
2013-04-26 1582.24 4211.65
2013-04-29 1593.61 4340.75
2013-04-30 1597.57 4467.55
2013-05-01 1582.70 4432.25
2013-05-02 1597.59 4494.95
2013-05-03 1614.42 4539.55
2013-05-06 1617.50 4645.95
2013-05-07 1625.96 4624.65
2013-05-08 1632.69 4677.40
2013-05-09 1626.67 4637.25
2013-05-10 1633.70 4602.40
2013-05-13 1633.77 4618.60
2013-05-14 1650.34 4510.85
2013-05-15 1658.78 4362.00
2013-05-16 1650.47 4418.95
2013-05-17 1667.47 4406.95
2013-05-20 1666.29 4503.50
2013-05-21 1669.16 4471.20
列を削除する方法は次のとおりです。
data = data.drop(stock.ticker,axis=1,level=0)
問題は次のとおりです。
>>> print data.columns
MultiIndex
[(^GSPC, Adj Close), (PF, Adj Close)]
>>> print data.columns.labels
[array([2, 3]), array([0, 0])]
>>> print data.columns.levels
[Index([nvda, aapl, ^GSPC, PF], dtype=object), Index([Adj Close], dtype=object)]
コメントで要求された DF の生成に使用されるメソッドの追加: tickers は株式ティッカー文字列のリストです。stock はとりわけティッカー プロパティを持つオブジェクトです。ポートフォリオは、株式のコレクションであるオブジェクトです。
data = getdata.get_history(tickers,dt.today()-relativedelta(months=months))
data = data.drop(['Open','High','Low','Close','Volume'],axis=1)
data = data.unstack(0).swaplevel(0,1,axis=1).sortlevel(0,axis=1)
data['PF','Adj Close'] = np.zeros(len(data))
for stock in portfolio.getStocksInPortfolio():
data['PF','Adj Close'] += data[stock.ticker,'Adj Close'] * stock.getSharesOwned()
data = data.drop(stock.ticker,axis=1,level=0)