Создание окон оценки на основе критериев (DataFrame) - PullRequest
0 голосов
/ 06 января 2019

Я смотрю, как можно выбрать пару строк (в частности, от -15 до -5) на основе определенных критериев.

У нас есть список событий (даты) и большой DataFrame со всеми ордерами BitCoin, упорядоченными по дате. В этом DataFrame у нас есть столбец, который помечает строку как «True», если в DataFrame найдено значение в Events.

Что я хочу сделать, так это то, что когда в этом столбце найдено «Истина», Python выбирает строки из 15 строк (-15) перед Истиной до 5 (-5) строк перед Истиной. Всего у нас 42 события, и наша цель - создать новый DataFrame, который мы будем использовать для расчета описательной статистики этих значений.

Image of Our DataFrame

1 Ответ

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

Вот пример. FYI. Обычно легче ответить на них, когда вы публикуете некоторый код, который генерирует некоторый набор тестовых данных:)

Во-первых, вот набор данных. Здесь мы в основном пытаемся выбрать на основе истинных значений. Но мы хотим только 1 до и 1 после, поэтому мы не должны видеть, что все прошло.

import pandas as pd
import numpy as np

data = [
    ['gone', False],
    ['a', False],
    ['abb', True],
    ['a', False],
    ['gone', False],
    ['gone', False],
    ['a', False],
    ['abbb', True],
    ['a', False],
    ['gone', False],
    ['gone', False]
]
df = pd.DataFrame(data=data, columns=['label', 'indicator'])

ranges = df[df['indicator']].index.values

Далее мы генерируем диапазон интересующих нас строк. Для вашего случая вы бы хотели установить num_before и num_after по-разному. Вы, вероятно, можете несколько сжать код, но я подумал, что шаги легче понять таким образом.

num_before = 1
num_after = 1

indexes = [range(x-num_before, x+num_after+1) for x in ranges] #+1 due to the behaviour of range
x = [list(rang) for rang in indexes]
i = np.array(x).reshape(-1)

Наконец, мы выбираем строки, соответствующие сгенерированному списку, который мы только что создали.

df.iloc[i]

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...