Python 查找第一个最小值

Python 查找第一个最小值,python,pandas,minimum,Python,Pandas,Minimum,如何在数据集中找到几个最小值中的第一个?我希望最终按顺序找到至少比最小值大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 = pd.DataFrame({'ID': [1,1,1,1,1,1,1,2,2], 'value': [0.6, 1.5, 1.6, 1.2,

如何在数据集中找到几个最小值中的第一个?我希望最终按顺序找到至少比最小值大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 = 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['value'][0]或仅0.6确定为该数组中的第一个最小值。然后将df[‘值’][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
正如在一篇评论中所建议的,循环将是一种更好的方式。

似乎您需要一个简单的loc

另一个选择是使用。比如说,

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 = 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]})
然后


展开函数首先生成NaN,而cummin占第一个值。只是理解如何解释结果的问题。

你是在问如何在一维数组中找到局部极小值吗?如果是这样的话,你要寻找的答案是其中一个还是其他答案中的一个?请加入你的预期输出,以明确你想要的是什么。我应该指出,一般来说,在Numpy,你通常不会找到…中的第一个,你会发现所有…可能是并行的,然后只需使用第一个或矢量化,或者有时迭代所有这些。因此,如果第一个值的短路对正确性很重要,或者预期会比矢量化带来更多性能增益,那么您可能需要循环。您能解释为什么第一个值为NaN吗?另外,如果数组是[1.5,0.6,…]呢?其中0.6是第二个元素?@abarnert感谢您的输入&我已经相应地更新了我的问题。不幸的是,工作数据不是1d数组,而是一个大数据集。cummin函数正是我所需要的。非常感谢。