Python 查找第一个最小值
如何在数据集中找到几个最小值中的第一个?我希望最终按顺序找到至少比最小值大2的值 比如说,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,
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函数正是我所需要的。非常感谢。