【问题标题】:Finding first minimum values python找到第一个最小值python
【发布时间】:2019-01-26 02:29:40
【问题描述】:

如何在数据集中找到几个最小值中的第一个?我希望最终依次找到至少比最小值大 2 的值。

例如,

import pandas as pd
import numpy as np
df = pd.DataFrame({'ID': [1,1,1,1,1,1,1], 'value': [0.6, 1.5, 1.6, 1.2, 2.8, 0.3, 0.2]})

我想将 df['value'][0] 或简称为 (0.6) 标识为该数组中的第一个最小值。然后将 df['value'][4] 或 (2.8) 确定为比第一个确定的最小值 (0.6) 至少大 2 的值。

df = pd.DataFrame({'ID': [1,1,1,1,1,1,1], 'value': [0.6, 1.5, 1.6, 1.2, 2.8, 0.3, 0.2]})
df['loc_min'] = df.value[(df.value.shift(1) >= df.value) & (df.value.shift(-1) >= df.value)]
df['loc_min']= df.groupby(['ID'], sort=False)['loc_min'].apply(lambda x: x.ffill()) 
df['condition'] = (df['value'] >= df['loc_min'] + 2)

这适用于其他数据集,但不适用于最小值。

理想的输出是:

    ID  value loc_min condition
0   1   0.6   nan     False
1   1   1.5   0.6     False
2   1   1.6   0.6     False
3   1   1.2   0.6     False
4   1   2.8   0.6     True
5   1   0.3   0.3     False
6   1   0.2   0.2     False

正如评论中所建议的,循环将是解决此问题的更好方法。

【问题讨论】:

  • 您是在问如何在一维数组中找到局部最小值吗?如果是这样,您正在寻找this question(或从那里链接的其他人之一)的答案之一吗?
  • 请添加您的预期输出以明确您想要什么。
  • 我应该指出,一般来说,在 Numpy 中,您通常不会找到“第一个……”,而是找到“所有……”(可能永远并行),然后只需使用第一个或矢量化(或有时迭代)所有这些。因此,如果第一个短路对正确性很重要,或者预计会比矢量化带来更多的性能提升,那么您可能需要循环。
  • 你能解释一下为什么第一个值是 NaN 吗?另外,如果数组是 [1.5, 0.6, ...] 怎么办?哪里 0.6 是第二个元素?
  • @abarnert 谢谢你的意见,我已经相应地更新了我的问题。不幸的是,工作数据不是一维数组,而是一个大型数据集。

标签: python pandas minimum


【解决方案1】:

好像你需要cummin 和一个简单的loc

df['cummin_'] = df.groupby('ID').value.cummin()
df['condition'] = df.value >= df.cummin_ + 2


    ID  value   cummin_ condition
0   1   0.6     0.6     False
1   1   1.5     0.6     False
2   1   1.6     0.6     False
3   1   1.2     0.6     False
4   1   2.8     0.6     True
5   1   0.3     0.3     False
6   1   0.2     0.2     False

另一种选择是使用expanding。举个例子,

df = pd.DataFrame({'ID': [1,1,1,1,1,1,1,2,2], 'value': [0.6, 1.5, 1.6, 1.2, 2.8, 0.3, 0.2,0.4,2.9]})

然后

df.groupby('ID').value.expanding(2).min()

    ID   
1   0    NaN
    1    0.6
    2    0.6
    3    0.6
    4    0.6
    5    0.3
    6    0.2
2   7    NaN
    8    0.4

扩展函数首先产生您的NaNs,而cummin 占第一个值。只是了解您希望如何解释结果。

【讨论】:

  • cummin 函数正是我所需要的。谢谢
猜你喜欢
  • 1970-01-01
  • 2022-12-14
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多