如何根据最后一行/下一行筛选Pandas行?

2024-06-08 16:10:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个来自不同脉搏血氧仪的数据集,并用pyplot绘制,如下所示。如您所见,绿色数据表有很多异常值(垂直下降)。在我的工作中,我把这些支出定义为无效的,在我的统计分析中,它们肯定不是度量。因此,我认为我可以简单地删除它们。在

这些流氓值的特点是它们是单个(或前两个)值异常值(见下面的df)。“实际”采样值要么与前一个值相同,要么是+-1。例如,在java(伪代码)中,我会做如下操作:

for(i; i <df.length; i++)
  if (df[i+1|-1].spo2 - df[i].spo2 > 1|-1)
    df[i].drop

熊猫会是什么相当于我正在尝试的操作,删除与上一个/下一个值相比大于/小于1的值?在


数据框:

^{pr2}$

sensor data from two pulse oximeters


Tags: 数据代码df定义度量绘制java数据表
2条回答

看看pandas.DataFrame.shift。这是一个列操作,将给定列中的所有行移到另一列的另一行:

# original df

   x1                 
0   0
1   1 
2   2
3   3
4   4 

# shift down
df.x2 = df.x1.shift(1) 

   x1  x2
0   0   NaN  # Beware
1   1   0
2   2   1
3   3   2
4   4   3

# Shift up
df.x2 = df.x1.shift(-1)

   x1  x2
0   0   1
1   1   2
2   2   3
3   3   4
4   4   NaN  # Beware

您可以使用它来移动时间戳n行中时间戳n+1spo2旁边。然后,根据应用于该行的条件进行筛选。在

^{pr2}$

当过滤pandas数据帧时,如下所示:

东风[数据框1=2&;数据框2<;3],您是:

  • 将数值序列与标量值进行比较并生成布尔序列
  • 得到两个布尔级数并进行逻辑与运算
  • 然后使用数字序列过滤数据帧(假值不会添加到新的数据帧中)

所以您只需要在数据帧上创建一个迭代算法来生成这样的布尔数组,并使用它来过滤数据帧,如:

import pandas as pd

data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])

df[ [True, False, True]]

也可以创建一个闭包来过滤数据帧(使用数据框应用),并在闭包中保留以前的观察结果来检测突变,但这太复杂了。我会选择直截了当的解决方案。在

相关问题 更多 >