Как найти значение в совокупной серии pandas? - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть серия pandas, и я выполнил на ней cumsum(). Результирующий ряд выглядит следующим образом:

A = [10, 25, 30, 20, 27, 29]

Я хочу найти диапазон в ряду, в котором находится определенное значение.

Например, значение 28 лежит между (25, 30) , (30, 20) и (27,29). В этом случае я хочу найти либо последний, либо все такие диапазоны. Как я могу достичь этого изначально в pandas и без лишних циклов?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Здесь возможен numpy подход:

import numpy as np

a = np.array([10, 25, 30, 20, 27, 29])
v = 28 # value to find

# Define intervals
intervals = {i: f'[ {min(i1, i2)}, {max(i1,i2)} ]' for i, (i1,i2) in enumerate(zip(a[:-1],a[1:]))}
intervals
{0: '[ 10, 25 ]', 1: '[ 25, 30 ]', 2: '[ 20, 30 ]', 3: '[ 20, 27 ]', 4: '[ 27, 29]'}

# Find indices of intervals
b = a-v
indices = np.squeeze(np.argwhere(b[:-1] *b[1:]<=0))
indices
array([1, 2, 4], dtype=int64)

[intervals[i] for i in indices]
['[ 25, 30 ]', '[ 20, 30 ]', '[ 27, 29 ]']
0 голосов
/ 19 апреля 2020

Это отвечает на ваш вопрос?

A = [10, 25, 30, 20, 27, 29]


def tuple_finder(num_value, num_array):
    i = 0
    j = i + 1
    tuple_list = []
    for e in num_array[:-1]:
        if (num_array[i] <= num_value <= num_array[j])\
                or (num_array[i] >= num_value >= num_array[j]):
            print(num_array[i], num_array[j])
            tuple_list.append((num_array[i], num_array[j]))
            i += 1
            j += 1
        else:
            i += 1
            j += 1
    print(tuple_list[-1])


tuple_finder(28, A)
...