【发布时间】:2021-03-03 16:25:11
【问题描述】:
我有一个包含值列表的数据框:
In [24]: data
Out[24]:
[{'value': 1.2},
{'value': 2.2},
{'value': 1.8},
{'value': 2.0},
{'value': 1.1},
{'value': 3.9},
{'value': 0.0},
{'value': 1.5},
{'value': 2.5},
{'value': 1.6},
{'value': 2.3},
{'value': 3.0},
{'value': 3.3},
{'value': 0.5},
{'value': 4.0},
{'value': 3.4},
{'value': 0.8},
{'value': 2.5},
{'value': 2.1},
{'value': 3.0}]
In [25]: df = pd.DataFrame(data=data)
In [26]: df
Out[26]:
value
0 1.2
1 2.2
2 1.8
3 2.0
4 1.1
5 3.9
6 0.0
7 1.5
8 2.5
9 1.6
10 2.3
11 3.0
12 3.3
13 0.5
14 4.0
15 3.4
16 0.8
17 2.5
18 2.1
19 3.0
现在我想通过以下方式选择这个数据框的一个子集:
- 选择最大值 - 很简单 -
df['value'].max() - 查找下 N 行,其值最接近最后一个值 - 0.2
即- 最大值是 4.0,所以我想找到值最接近4.0 - 0.2 = 3.8 的行,即第 5 行。
接下来,我想找到一个值为4.0 - (0.2 * 2) = 3.6的行,所以这将是第15行(3.4),依此类推(最多N次)
有没有快速的方法来做到这一点?
预期输出:
value
0 4.0
1 3.9
2 3.4
我将使用的实际数据应该分布得更均匀,因此在每个预期值周围(即 3.8、3.6、3.4 左右)都会有许多接近值(例如 3.44、3.38、3.41)
【问题讨论】:
-
所以您的预期输出应该只有 3 个值?
-
值的个数是 N - 我想控制它
-
@CIsForCookies 考虑到接近
4.0 - (0.2 * 3) = 3.4的值,我猜结果应该是3.4,对吗? -
@ShubhamSharma 正确