Python 获取列数据帧中等于或最接近的最后一个值

Python 获取列数据帧中等于或最接近的最后一个值,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我的代码中有一个问题,我正在进行切分 首先,这是我的Dataframe列: In [23]: df['bad_%'] 0 0.025 1 0.007 2 0.006 3 0.006 4 0.006 5 0.006 6 0.007 7 0.007 8 0.007 9 0.006 10 0.006 11 0.009 12 0.009 13

我的代码中有一个问题,我正在进行切分

首先,这是我的Dataframe列:

In [23]: df['bad_%']

0       0.025
1       0.007
2       0.006
3       0.006
4       0.006
5       0.006
6       0.007
7       0.007
8       0.007
9       0.006
10      0.006
11      0.009
12      0.009
13      0.009
14      0.008
15      0.008
16      0.008
17      0.012
18      0.012
19      0.05
20      0.05
21      0.05
22      0.05
23      0.05
24      0.05
25      0.05
26      0.05
27      0.062
28      0.062
29      0.061

5143    0.166
5144    0.166
5145    0.166
5146    0.167
5147    0.167
5148    0.167
5149    0.167
5150    0.167
5151    0.05
5152    0.167
5153    0.167
5154    0.167
5155    0.167
5156    0.051
5157    0.052
5158    0.161
5159    0.149
5160    0.168
5161    0.168
5162    0.168
5163    0.168
5164    0.168
5165    0.168
5166    0.168
5167    0.168
5168    0.049
5169    0.168
5170    0.168
5171    0.168
5172    0.168
Name: bad%, Length: 5173, dtype: float64
我使用此代码检测到值等于或最接近0.05(控制台上引入的值)

但我的目标是获得列中的最后一个值等于或最接近“0.05”,在这种情况下,该值对应于索引“5168”中的“0.049”,我需要获得该值

是否存在允许此操作的算法?有什么解决办法或建议吗?
提前感谢。

解决方案如果存在至少一个值:

使用
[::-1]
从后面交换值,并获取最后匹配的索引值:

a = 0.05
s = df['bad%']

b = s[[(s[::-1] <= a).idxmax()]]
print (b)
5168    0.049
样本数据

df = pd.DataFrame({'bad%': {5146: 0.16699999999999998, 5147: 0.16699999999999998, 5148: 0.16699999999999998, 5149: 0.049, 5150: 0.16699999999999998, 5151: 0.05, 5152: 0.16699999999999998, 5167: 0.168, 5168: 0.049, 5169: 0.168}})

解决方案(如果存在)至少有一个值:

使用
[::-1]
从后面交换值,并获取最后匹配的索引值:

a = 0.05
s = df['bad%']

b = s[[(s[::-1] <= a).idxmax()]]
print (b)
5168    0.049
样本数据

df = pd.DataFrame({'bad%': {5146: 0.16699999999999998, 5147: 0.16699999999999998, 5148: 0.16699999999999998, 5149: 0.049, 5150: 0.16699999999999998, 5151: 0.05, 5152: 0.16699999999999998, 5167: 0.168, 5168: 0.049, 5169: 0.168}})

您的代码输出我:[435:0.049],在df[bad%]行(434-437)中也有这些值。为了让我更好地处理数据,请将示例数据添加到问题中。也许浮动精度有问题?如何处理更改,如
a=0.04
?您的代码输出我:[435:0.049],在df[bad%]行(434-437)中也有这些值。为了让我更好地处理数据,将示例数据添加到问题中。也许浮动精度有问题?如何处理更改,如
a=0.04
?定义“最接近”。x加上一些ε值?定义“最接近”。x加上一些ε值?
a = 0.05
s = df['bad%']
m1 = (s <= a)
m2 = m1[::-1].cumsum().eq(1)

b = s[m1 & m2]
print (b)
5168    0.049
Name: bad%, dtype: float64
df = pd.DataFrame({'bad%': {5146: 0.16699999999999998, 5147: 0.16699999999999998, 5148: 0.16699999999999998, 5149: 0.049, 5150: 0.16699999999999998, 5151: 0.05, 5152: 0.16699999999999998, 5167: 0.168, 5168: 0.049, 5169: 0.168}})