如何删除特定索引的行?

时间:2017-09-10 08:27:52

标签: python database pandas numpy dataframe

我有一个多索引数据框。我想删除包含以09:15:00结尾的索引的行。

我在这里有一个可重复的代码:https://gist.github.com/RJUNS/f4ad32d9b6da8cf4bedde0046a26f368

                               CLOSE  HIGH    LOW     OPEN    VOLUME
2017-09-07 09:15:00   VEDL    320.20  320.20  320.20  320.20  311
2017-09-07 09:30:00   ACC     1808.05 1812.95 1798.75 1806.80 21611
                      VEDL    319.85  320.60  319.25  320.00  651516
2017-09-07 09:45:00   ACC     1805.00 1812.00 1802.10 1810.45 12679
                      VEDL    319.35  320.80  318.85  319.90  417515
2017-09-07 10:00:00   ACC     1802.00 1807.15 1800.85 1805.00 9915
                      VEDL    320.15  320.30  319.20  319.50  259587

换句话说,我想放弃行:

2017-09-07 09:15:00 VEDL    320.20  320.20  320.20  320.20  311

请注意,我有多个以09:15:00

结尾的索引

有人有任何解决方案吗?

1 个答案:

答案 0 :(得分:2)

使用boolean indexing,选择第一级get_level_values并与time进行比较:

df1 = df[df.index.get_level_values(0).time != datetime.time(9, 15)]
print (df1)

...
                    VEDL  332.20  332.75  332.00  332.55   154978
2017-09-08 08:30:00 INFY  890.00  890.00  889.70  889.70    64289
                    VEDL  331.50  332.20  331.40  332.20   393830
2017-09-08 08:45:00 INFY  889.85  890.00  889.60  890.00   142584
                    VEDL  331.70  332.00  331.20  331.40   342857
2017-09-08 09:00:00 INFY  889.65  890.10  889.25  889.85   234244
                    VEDL  331.85  332.00  331.45  331.65   458025
2017-09-08 09:30:00 INFY  886.45  889.85  885.90  889.60   365388
                    VEDL  331.45  332.40  331.20  331.70   912145
...

针对行位置DatetimeIndex.indexer_at_time的另一个解决方案,然后获取MultiIndex值并按drop删除:

df1 = df.drop(df.index[df.index.get_level_values(0).indexer_at_time('9:15:00')])

使用由DatetimeIndex.strftime创建的字符串的comapre解决方案:

df1 = df[df.index.get_level_values(0).strftime('%H:%M') != '09:15']