我有一个多索引数据框,我使用 df.drop(col,axis=1) 从中删除列。然后,我正在查看 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 是一个具有ticker 属性的对象。投资组合是一个对象,它是股票的集合。
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)