我有一个多索引数据框。我想删除包含以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
有人有任何解决方案吗?
答案 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']