Получение последнего значения, равного или самого близкого в кадре данных столбца - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть проблема в моем коде, я делаю точки разрезов.

Во-первых, это мой столбец 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 (ЗНАЧЕНИЕ, ВНЕДРЕННОЕ НА КОНСОЛЕ)

    error = 100                     #Margin of error
    valuesA = []                    #array to save data  
    pointCut=0                      #identify cut point
    for index, row in df.iterrows():
        if(abs(row['bad%'] - a) <= error):
            valuesA = row
            error = abs(row['bad%'] - a)         
            #Variable "a" introduced by console, in this case is "0.05"
            pointCut = index

Этот код возвращает значение "0,05" в индексе 5151 в первомЭкземпляр выглядит хорошо, потому что "0,05" в индексе "5151" является последним "0,05" .

Out [27]: 
5151    0.05

Но моя цель - получить ПОСЛЕДНЕЕ ЗНАЧЕНИЕ В КОЛОННЕ равно или максимально близко к "0,05" , в этом случае это значение соответствует "0,049" в индексе "5168" , мне нужно получить это значение.

Существует алгоритм, который разрешает это?Любое решение или рекомендация?Заранее спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

Решения, если существуют, по крайней мере, одно значение:

Используйте [::-1] для значений подкачки со спины и получите idxmax для последнего соответствующего значения индекса:

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

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

Или:

b = s[(s <= a)].iloc[[-1]]
print (b)
5168    0.049
Name: bad%, dtype: float64

Решение работает также, если значение не существует - тогда пустое значение Series дает:

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}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...