我有一个如下所示的数据框:
2018-10-16 15:15:00 1810.388020
2018-10-16 15:20:00 1813.299467
2018-10-16 15:25:00 1812.550495
2018-10-16 15:45:00 18140.981919
2018-10-16 15:35:00 1814.473347
2018-10-16 15:40:00 1816.349779
2018-10-16 15:45:00 740.981919
2018-10-16 15:50:00 1819.066781
2018-10-16 15:55:00 1820.333191
我需要一个如下所示的数据框:
2018-10-16 15:15:00 1810.388020
2018-10-16 15:20:00 1813.299467
2018-10-16 15:25:00 1812.550495
2018-10-16 15:35:00 1814.473347
2018-10-16 15:40:00 1816.349779
2018-10-16 15:50:00 1819.066781
2018-10-16 15:55:00 1820.333191
即:对于大于前一行值 1.5 或小于前一行值 0.5 的每一行,将其删除
最佳答案
想法是比较前一个值和下一个值,通过 |
进行按位 OR
链接,最后通过按位 AND
链接,并按 boolean indexing
进行过滤。 :
m11 = df['col'] > df['col'].shift(-1) * 0.5
m12 = df['col'] > df['col'].shift() * 0.5
m21 = df['col'] < df['col'].shift(-1) * 1.5
m22 = df['col'] < df['col'].shift() * 1.5
df = df[(m11 | m12) & (m21 | m22)]
print (df)
col
2018-10-16 15:15:00 1810.388020
2018-10-16 15:20:00 1813.299467
2018-10-16 15:25:00 1812.550495
2018-10-16 15:35:00 1814.473347
2018-10-16 15:40:00 1816.349779
2018-10-16 15:50:00 1819.066781
2018-10-16 15:55:00 1820.333191
详细信息:
df['m11'] = df['col'] > df['col'].shift(-1) * 0.5
df['m12'] = df['col'] > df['col'].shift() * 0.5
df['m21'] = df['col'] < df['col'].shift(-1) * 1.5
df['m22'] = df['col'] < df['col'].shift() * 1.5
df['m1'] = (df['m11'] | df['m12'])
df['m2'] = (df['m21'] | df['m22'])
df['mask'] = df['m1'] & df['m2']
print (df)
col m11 m12 m21 m22 m1 m2 \
2018-10-16 15:15:00 1810.388020 True False True False True True
2018-10-16 15:20:00 1813.299467 True True True True True True
2018-10-16 15:25:00 1812.550495 False True True True True True
2018-10-16 15:45:00 18140.981919 True True False False True False
2018-10-16 15:35:00 1814.473347 True False True True True True
2018-10-16 15:40:00 1816.349779 True True False True True True
2018-10-16 15:45:00 740.981919 False False True True False True
2018-10-16 15:50:00 1819.066781 True True True False True True
2018-10-16 15:55:00 1820.333191 False True False True True True
mask
2018-10-16 15:15:00 True
2018-10-16 15:20:00 True
2018-10-16 15:25:00 True
2018-10-16 15:45:00 False
2018-10-16 15:35:00 True
2018-10-16 15:40:00 True
2018-10-16 15:45:00 False
2018-10-16 15:50:00 True
2018-10-16 15:55:00 True
关于python - 根据前一行的值从数据框中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58956291/