一旦熊猫达到阈值(最小/最大值),就删除数据框中的值

愤怒的被子

我想为整个数据框创建一个过滤器,其中包括C列以外的许多列。我希望此过滤器在达到最小阈值后返回每列中的值,并在达到最大阈值时停止到达。我希望最小阈值为6.5,最大阈值为9.0。这并不像听起来那么简单,所以请和我一起挂...

数据框:

Time    A1  A2  A3
1   6.305   6.191   5.918
2   6.507   6.991   6.203
3   6.407   6.901   6.908
4   6.963   7.127   7.116
5   7.227   7.330   7.363
6   7.445   7.632   7.575
7   7.710   7.837   7.663
8   8.904   8.971   8.895
9   9.394   9.194   8.994
10  8.803   8.113   9.333
11  8.783   8.783   8.783

理想的结果:

Time    A1  A2  A3
1   NaN     NaN     NaN
2   6.507   6.991   NaN
3   6.407   6.901   6.908
4   6.963   7.127   7.116
5   7.227   7.330   7.363
6   7.445   7.632   7.575
7   7.710   7.837   7.663
8   8.904   8.971   8.895
9   NaN     NaN     8.994
10  NaN     NaN     NaN
11  NaN     NaN     NaN

为了驾驭这一点,例如在A列中,在时间3处有一个值6.407,该值低于6.5阈值,但是由于在时间2处已达到阈值,因此我想在每分钟已达到阈值。至于上限阈值,在时间9的A列中,该值高于9.0阈值,因此我希望它忽略该值以及超出该值的值,即使其余值小于9.0。我希望在更多的专栏文章中对此进行迭代。

谢谢!!!

迪卡卡(Divakar)

执行

这是使用NumPy boolean indexing-的矢量化方法

# Extract values into an array
arr = df.values

# Determine the min,max limits along each column
minl = (arr > 6.5).argmax(0)
maxl = (arr>9).argmax(0)

# Setup corresponding boolean mask and set those in array to be NaNs
R = np.arange(arr.shape[0])[:,None]
mask = (R < minl) | (R >= maxl)
arr[mask] = np.nan

# Finally convert to dataframe
df = pd.DataFrame(arr,columns=df.columns)

请注意,也可以直接将其蒙版到输入数据框中,而不用重新创建它,但有趣的发现是,将布尔值索引到NumPy数组中比将其索引到熊猫数据帧中要快。由于我们正在过滤整个数据框,因此我们可以重新创建该数据框。

仔细看看

现在,让我们仔细看一下蒙版创建部分,这是此解决方案的关键所在。

1)输入数组:

In [148]: arr
Out[148]: 
array([[ 6.305,  6.191,  5.918],
       [ 6.507,  6.991,  6.203],
       [ 6.407,  6.901,  6.908],
       [ 6.963,  7.127,  7.116],
       [ 7.227,  7.33 ,  7.363],
       [ 7.445,  7.632,  7.575],
       [ 7.71 ,  7.837,  7.663],
       [ 8.904,  8.971,  8.895],
       [ 9.394,  9.194,  8.994],
       [ 8.803,  8.113,  9.333],
       [ 8.783,  8.783,  8.783]])

2)最小,最大限制:

In [149]: # Determine the min,max limits along each column
     ...: minl = (arr > 6.5).argmax(0)
     ...: maxl = (arr>9).argmax(0)
     ...: 

In [150]: minl
Out[150]: array([1, 1, 2])

In [151]: maxl
Out[151]: array([8, 8, 9])

3)broadcasting用于创建跨整个数据框/数组的掩码,并选择要设置为的元素NaNs

In [152]: R = np.arange(arr.shape[0])[:,None]

In [153]: R
Out[153]: 
array([[ 0],
       [ 1],
       [ 2],
       [ 3],
       [ 4],
       [ 5],
       [ 6],
       [ 7],
       [ 8],
       [ 9],
       [10]])

In [154]: (R < minl) | (R >= maxl)
Out[154]: 
array([[ True,  True,  True],
       [False, False,  True],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [ True,  True, False],
       [ True,  True,  True],
       [ True,  True,  True]], dtype=bool)

运行时测试

让我们花时间列出到目前为止解决问题的方法,并且由于提到了我们将有许多列,因此让我们使用大量列。

列为功能的方法:

def cumsum_app(df):    # Listed in other solution by @Merlin
    df2 = df > 6.5 
    df  = df[df2.cumsum()>0]
    df2 = df > 9   
    df  = df[~(df2.cumsum()>0)]

def boolean_indexing_app(df):  # Approaches listed in this post
    arr = df.values
    minl = (arr > 6.5).argmax(0)
    maxl = (arr>9).argmax(0)
    R = np.arange(arr.shape[0])[:,None]
    mask = (R < minl) | (R >= maxl)
    arr[mask] = np.nan
    df = pd.DataFrame(arr,columns=df.columns)

时间:

In [163]: # Create a random array with floating pt numbers between 6 and 10
     ...: df = pd.DataFrame((np.random.rand(11,10000)*4)+6)
     ...: 
     ...: # Create copies for testing approaches
     ...: df1 = df.copy()
     ...: df2 = df.copy()


In [164]: %timeit cumsum_app(df1)
100 loops, best of 3: 16.4 ms per loop

In [165]: %timeit boolean_indexing_app(df2)
100 loops, best of 3: 2.09 ms per loop

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

在一个日期之后使用另一个变量的值达到该日期的最大值/最小值的日期之后分割数据帧

来自分类Dev

根据列中的最大值过滤数据框-熊猫

来自分类Dev

在熊猫时间序列数据框中查找自条件以来的最大值

来自分类Dev

OpenCV中阈值图像的最大值和最小值范围

来自分类Dev

从整个熊猫数据框中返回最大值,而不是基于列或行

来自分类Dev

一个数据框的每个列的最大值和最小值

来自分类Dev

熊猫-查找多层数据框的最大值

来自分类Dev

熊猫:求解时间序列数据集的最大值阈值

来自分类Dev

R:在数据框中查找列列表的最大值/最小值

来自分类Dev

在熊猫数据框的分组依据中获得唯一计数和最大值

来自分类Dev

在非常复杂的条件下在熊猫数据框中获取最大值和最小值

来自分类Dev

熊猫数据框str拆分最大值

来自分类Dev

如何为熊猫数据框中的多索引中的列选择最大值?

来自分类Dev

熊猫数据框查找局部最大值和最小值之和

来自分类Dev

如何在熊猫数据框中按值组找到n个最大值的总和?

来自分类Dev

大熊猫遍历列以查找文本匹配项,一旦找到,则比较两个数据框中的相邻行值<>

来自分类Dev

如何仅更改熊猫数据框中仅具有一定数量的总和的组的最大值

来自分类Dev

熊猫数据框通过绝对值优化获得最大值和最小值

来自分类Dev

在一个日期之后使用另一个变量的值达到该日期的最大值/最小值的日期之后分割数据帧

来自分类Dev

如何在熊猫数据框的多个列中最小/最大值?

来自分类Dev

根据列中的匹配值以及匹配的那些值的最小/最大值时间戳记过滤数据框

来自分类Dev

多索引数据框删除行,每组最大值

来自分类Dev

熊猫多索引数据框-从多索引多系统中的一个索引中选择最大值

来自分类Dev

熊猫-查找多层数据框的最大值

来自分类Dev

删除数据框中缺少值的重复值

来自分类Dev

用 R 中的现有值替换数据框中的最大值和最小值

来自分类Dev

熊猫滚动最小最大值

来自分类Dev

一旦文本框的值存储在数据库中,禁用它 - PHP

来自分类Dev

如何在熊猫数据框中设置最小值和最大值?

Related 相关文章

  1. 1

    在一个日期之后使用另一个变量的值达到该日期的最大值/最小值的日期之后分割数据帧

  2. 2

    根据列中的最大值过滤数据框-熊猫

  3. 3

    在熊猫时间序列数据框中查找自条件以来的最大值

  4. 4

    OpenCV中阈值图像的最大值和最小值范围

  5. 5

    从整个熊猫数据框中返回最大值,而不是基于列或行

  6. 6

    一个数据框的每个列的最大值和最小值

  7. 7

    熊猫-查找多层数据框的最大值

  8. 8

    熊猫:求解时间序列数据集的最大值阈值

  9. 9

    R:在数据框中查找列列表的最大值/最小值

  10. 10

    在熊猫数据框的分组依据中获得唯一计数和最大值

  11. 11

    在非常复杂的条件下在熊猫数据框中获取最大值和最小值

  12. 12

    熊猫数据框str拆分最大值

  13. 13

    如何为熊猫数据框中的多索引中的列选择最大值?

  14. 14

    熊猫数据框查找局部最大值和最小值之和

  15. 15

    如何在熊猫数据框中按值组找到n个最大值的总和?

  16. 16

    大熊猫遍历列以查找文本匹配项,一旦找到,则比较两个数据框中的相邻行值<>

  17. 17

    如何仅更改熊猫数据框中仅具有一定数量的总和的组的最大值

  18. 18

    熊猫数据框通过绝对值优化获得最大值和最小值

  19. 19

    在一个日期之后使用另一个变量的值达到该日期的最大值/最小值的日期之后分割数据帧

  20. 20

    如何在熊猫数据框的多个列中最小/最大值?

  21. 21

    根据列中的匹配值以及匹配的那些值的最小/最大值时间戳记过滤数据框

  22. 22

    多索引数据框删除行,每组最大值

  23. 23

    熊猫多索引数据框-从多索引多系统中的一个索引中选择最大值

  24. 24

    熊猫-查找多层数据框的最大值

  25. 25

    删除数据框中缺少值的重复值

  26. 26

    用 R 中的现有值替换数据框中的最大值和最小值

  27. 27

    熊猫滚动最小最大值

  28. 28

    一旦文本框的值存储在数据库中,禁用它 - PHP

  29. 29

    如何在熊猫数据框中设置最小值和最大值?

热门标签

归档