0

我有一个多索引数据框,我使用 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)
4

0 回答 0