查找第一个最小值 python



如何在数据集中找到几个最小值中的第一个?我想最终按顺序找到至少比最小值大 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

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

似乎你需要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

展开函数首先产生您的NaN,而cummin则占第一个值。只需了解您希望如何解释结果即可。

最新更新