python - 根据前一行的值从数据框中删除行

标签 python python-3.x pandas dataframe

我有一个如下所示的数据框:

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/

相关文章:

python - 如何在 django 项目中运行 python 脚本?

Python CURL 指定ip地址

python - Pandas 设置列子集慢

python - 安装 win32gui python 模块

python - 使用日期时间绘制切片 Pandas 数据框时出现 KeyError

python - 二维矩阵到圆锥图像

css - Web Scraping contents of::before::after CSS伪元素使用BeautifulSoup

python - Django 测试客户端不创建数据库条目

python - 对多个 pandas 数据帧执行相同操作的正确方法是什么?

python - 数据帧上选定值的平均值