我有一个多索引数据框。我想删除索引以 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
结尾的索引
请问有人有什么解决办法吗?
最佳答案
使用boolean indexing
, 用于选择第一级 get_level_values
并与时间
比较:
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']
关于python - 如何删除特定索引的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46138760/