Найти минимальное значение между текущим и предыдущим пересечениями скользящих средних в пандах

Вам нужно добавить свойство vertical-align к вашим двум дочерним div.

Если .small всегда короче, вам нужно применить свойство только к .small. Однако, если любой из них может быть самым высоким, вы должны применить свойство как к .small, так и к .big.

.container{ 
    border: 1px black solid;
    width: 320px;
    height: 120px;    
}

.small{
    display: inline-block;
    width: 40%;
    height: 30%;
    border: 1px black solid;
    background: aliceblue; 
    vertical-align: top;   
}

.big {
    display: inline-block;
    border: 1px black solid;
    width: 40%;
    height: 50%;
    background: beige; 
    vertical-align: top;   
}

Вертикальный выравнивание влияет на ядро ​​встроенного или табличного ящика, и есть большой нумер различные значения для этого свойства. Подробнее см. В https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align .

1
задан smci 23 January 2019 в 05:39
поделиться

2 ответа

Если я правильно понимаю ваш вопрос, вам нужно динамическое «скользящее окно», по которому можно рассчитать минимальное значение. Предполагая, что ваш индекс является индексом по умолчанию, то есть он отсортирован в порядке возрастания, вы можете попробовать следующий подход:

import pandas as pd
import numpy as np
from bisect import bisect_left

df = pd.DataFrame({'open': [1, 2, 3, 4, 5],
                   'high': [5, 6, 6, 5, 7],
                   'low': [1, 3, 2, 4, 4],
                   'close': [3, 5, 3, 5, 6]})

Используются те же данные выборки, что и для mommermi, но с низким значением на третий день, измененным на 2 так как третий день также должен быть включен в «скользящее окно».

df['day'] = np.where(df['close'] > df['open'], 'bull', None)

Мы вычисляем столбец day, используя векторизованную операцию numpy, которая должна быть немного быстрее.

bull_index_array = df.loc[df['day'] == 'bull'].index

Мы храним значения индекса строк (дней), которые мы пометили как быков.

def find_index(a, x):
    i = bisect_left(a, x)
    return a[i-1]

Бисект из базовой библиотеки позволит нам эффективно найти индекс предыдущего бычьего дня. Для этого требуется, чтобы индекс был отсортирован по умолчанию.

def min_value(x):
    cur_index = x.name
    prev_bull_index = find_index(bull_index_array, cur_index)
    return df.loc[prev_bull_index:cur_index, 'low'].min()

Далее мы определяем функцию, которая будет создавать наше «динамическое» скользящее окно путем нарезки исходного кадра данных по предыдущему и текущему индексу.

df['min'] = df.apply(min_value, axis=1)

Наконец, мы применяем функцию min_value по строкам к кадру данных, получая это:

    open    high    low     close   day     min
0   1       5       1       3       bull    NaN
1   2       6       3       5       bull    1.0
2   3       6       2       3       None    2.0
3   4       5       4       5       bull    2.0
4   5       7       4       6       bull    4.0
0
ответ дан gherka 23 January 2019 в 05:39
поделиться

Это должно сработать:

import pandas as pd

df = pd.DataFrame({'open': [1, 2, 3, 4, 5],
                   'high': [5, 6, 6, 5, 7],
                   'low': [1, 3, 3, 4, 4],
                   'close': [3, 5, 3, 5, 6]})

df['day'] = df.apply(lambda x: 'bull' if (
    x['close'] > x['open']) else None, axis=1)

df['min'] = None
df['min'][df['day'] == 'bull'] = pd.rolling_min(
    df['low'][df['day'] == 'bull'], window=2)

print(df)

#    close  high  low  open   day   min
# 0      3     5    1     1  bull   NaN 
# 1      5     6    3     2  bull     1
# 2      3     6    3     3  None  None
# 3      5     5    4     4  bull     3
# 4      6     7    4     5  bull     4

Открыть для комментариев!

0
ответ дан mommermi 23 January 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: