根据索引

时间:2015-07-31 08:59:34

标签: python pandas

我有以下数据框:

                        date         col_1    col_2
(exchange, symbol)
 CME,abc                2015-01-02   435      5678
                        2015-01-03   754      236
 JSE,xyz                2015-01-02   15       6871
                        2015-01-03   7258     7236

有一个多指数,即交换+符号。我需要删除特定索引的所有行。例如:删除所有(CME,abc)行。

通常当我需要根据条件删除行时,我会这样做:

df = df[df['col_1'] != 754]

但是,这似乎只适用于基于特定列条件的行删除。我需要做的是同样的事情,但基于某个索引。

2 个答案:

答案 0 :(得分:2)

您可以使用drop指定要删除的标签。如果是多索引,您可以将标签作为元组传递 使用虚拟示例:

In [46]: df = pd.DataFrame(np.random.randn(4,2), index=pd.MultiIndex.from_arrays([['a', 'a', 'b', 'b'],[1,1,2,2]]))

In [47]: df
Out[47]:
            0         1
a 1  0.510701  0.534342
  1  0.229360 -1.403280
b 2 -0.218433  0.619108
  2 -0.679179 -0.195241

In [48]: df.drop([('a', 1)])
Out[48]:
            0         1
b 2 -0.218433  0.619108
  2 -0.679179 -0.195241

顺便说一句,您也可以在索引上应用df[df['col_1'] != 754]的逻辑。这将给出df[df.index != 754],尽管这不适用于多索引

答案 1 :(得分:1)

您可以将索引标签的元组传递给drop

In [117]:
df1.drop(('CME','abc'))

Out[117]:
                      date  col_1  col_2
exchange symbol                         
JSE      xyz    2015-01-02     15   6871
         xyz    2015-01-03   7258   7236