Сравнение текущей строки и предыдущей строки в Pandas

У меня есть стандартный фреймворк:

   Open     High      Low    Close  Volume        rb          us  \
0  1.20821  1.20821  1.20793  1.20794  138.96  0.022347  100.000000   
1  1.20794  1.20795  1.20787  1.20788  119.61  0.004967   85.714286   
2  1.20788  1.20793  1.20770  1.20779  210.42  0.007451   64.285714   
3  1.20779  1.20791  1.20779  1.20789   77.51  0.008280   83.333333   
4  1.20789  1.20795  1.20789  1.20792   56.97  0.002484   50.000000   

           ls  color  
0   96.428571  black  
1   85.714286  black  
2   50.000000  black  
3  100.000000  white  
4  100.000000  white  

Я хочу сравнить данные текущей строки с данными предыдущей строки, примерно так:

if (df['color'] == df['color'].shift(-1)):
   if ((df['Close'] >= df['Open'].shift(-1) and df['Open']>=df['Close'].shift(-1)):
      df['Position'] = UP
   if ((df['Close'] < df['Open'].shift(-1) and df['Open']<=df['Close'].shift(-1)):
      df['Position'] = DOWN

ЕСТЬ МНОГО БОЛЬШЕ, ЕСЛИ УСЛОВИЯ ...

Невозможно сравнить данные по

np.where(condition,TRUE,FALSE)

Из-за множества условий в моем алгоритме. Это просто их часть.

Как я могу проверить эти условия?

Можно ли создавать отдельные столбцы для каждого условия? Таким образом, вы можете сравнивать строки для истинного состояния @Behdad Ahmadi

Biarys 08.06.2018 22:56

@Biarys Я хочу создать модель, а затем скомпилировать ее с помощью решения Keras для глубокого обучения. Если я создам отдельные столбцы, модель будет настолько плохой для глубокого обучения.

Behdad 08.06.2018 23:02
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
6 320
2

Ответы 2

Тебе нужно:

df['Position'] = np.where((df['Volume'] > df['Volume'].shift(-1)) & ((df['Close'] >= df['Close'].shift(-1)) & (df['Open'] <= df['Open'])),"UP","DOWN")

Выход:

        Open    High    Low Close   Volume  Position
0   1.20821 1.20821 1.20793 1.20794 138.96  UP
1   1.20794 1.20795 1.20787 1.20788 119.61  DOWN
2   1.20788 1.20793 1.20770 1.20779 210.42  DOWN
3   1.20779 1.20791 1.20779 1.20789 77.51   DOWN
4   1.20789 1.20795 1.20789 1.20792 56.97   DOWN

Я думаю твой ответ смотрит в будущее

Biarys 08.06.2018 22:37

Посмотрите на условия OP. Может быть, df со временем сортируется в обратном порядке? Поскольку у нас нет временных меток, мы не можем это комментировать. @Biarys

harvpan 08.06.2018 22:38

Я никогда не видел данных временных рядов акций с самыми последними датами наверху, но я думаю, что это возможно @Harv Ipan

Biarys 08.06.2018 22:44

Я бы разделил это на разные проверки:

diffdf = df.diff()[1:]

cond1 = diffdf['Volume'] > 0
cond2 = diffdf['Close'] >= 0
# cond3 = diffdf['Open'] >= 0 ?? What is this supposed to check?

df['Position'] = np.insert(np.where(cond1&cond2, 'UP', 'DOWN'), 0, '-')

df.diff():

      Open     High      Low    Close  Volume
0      NaN      NaN      NaN      NaN     NaN
1 -0.00027 -0.00026 -0.00006 -0.00006  -19.35
2 -0.00006 -0.00002 -0.00017 -0.00009   90.81
3 -0.00009 -0.00002  0.00009  0.00010 -132.91
4  0.00010  0.00004  0.00010  0.00003  -20.54

Полный пример:

import pandas as pd
import numpy as np

data = '''\
Open     High      Low    Close  Volume
1.20821  1.20821  1.20793  1.20794  138.96
1.20794  1.20795  1.20787  1.20788  119.61
1.20788  1.20793  1.20770  1.20779  210.42
1.20779  1.20791  1.20779  1.20789   77.51
1.20789  1.20795  1.20789  1.20792   56.97'''

fileobj = pd.compat.StringIO(data)
df = pd.read_csv(fileobj, sep='\s+')

# Our client wants to know what stocks have increased in Volumne and Close
# We call this element Position and it is either Up,Down,-
# Let us create a difference dataframe and check those conditions
diffdf = df.diff()[1:]
cond1 = diffdf['Volume'] > 0
cond2 = diffdf['Close'] >= 0
df['Position'] = np.insert(np.where(cond1&cond2, 'UP', 'DOWN'), 0, '-')

print(df)

Возврат:

      Open     High      Low    Close  Volume Position
0  1.20821  1.20821  1.20793  1.20794  138.96        -
1  1.20794  1.20795  1.20787  1.20788  119.61     DOWN
2  1.20788  1.20793  1.20770  1.20779  210.42     DOWN
3  1.20779  1.20791  1.20779  1.20789   77.51     DOWN
4  1.20789  1.20795  1.20789  1.20792   56.97     DOWN

condColor_BLACK_BLACK = diffdf ['color'] == 'black' & diffdf ['color'] == 'black' Как я могу проверить это условие, оно возвращает ошибку: TypeError: неподдерживаемые типы операндов для -: 'str' и 'str'

Behdad 08.06.2018 22:39

@BehdadAhmadi У вас есть цвета в ваших данных? Я не понимаю.

Anton vBR 08.06.2018 22:40

Я упоминаю рассматриваемый фрейм данных в очень простой структуре из-за многих сложных структур.

Behdad 08.06.2018 22:44

@BehdadAhmadi Хорошо, конечно.

Anton vBR 08.06.2018 22:45

@BehdadAhmadi Хорошо, но попробуй объяснить, при чем тут Блэк?

Anton vBR 08.06.2018 22:54

если ЗАКРЫТЬ> ОТКРЫТЬ => ЦВЕТ = БЕЛЫЙ, а в противном случае ЧЕРНЫЙ, я делаю модель для ИНС

Behdad 08.06.2018 22:57

@BehdadAhmadi Извините ... но, на мой взгляд, ваш вопрос далеко не ясен. Я не могу вам помочь дальше, банкомат.

Anton vBR 08.06.2018 23:05

Большое вам спасибо за то, что вы уделили мне время. Вы мне очень помогли.

Behdad 08.06.2018 23:10

Другие вопросы по теме