如何在数据集中找到几个最小值中的第一个?我想最终按顺序找到至少比最小值大 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
则占第一个值。只需了解您希望如何解释结果即可。