У меня есть стандартный фреймворк:
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)
Из-за множества условий в моем алгоритме. Это просто их часть.
Как я могу проверить эти условия?
@Biarys Я хочу создать модель, а затем скомпилировать ее с помощью решения Keras для глубокого обучения. Если я создам отдельные столбцы, модель будет настолько плохой для глубокого обучения.






Тебе нужно:
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
Я думаю твой ответ смотрит в будущее
Посмотрите на условия OP. Может быть, df со временем сортируется в обратном порядке? Поскольку у нас нет временных меток, мы не можем это комментировать. @Biarys
Я никогда не видел данных временных рядов акций с самыми последними датами наверху, но я думаю, что это возможно @Harv Ipan
Я бы разделил это на разные проверки:
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'
@BehdadAhmadi У вас есть цвета в ваших данных? Я не понимаю.
Я упоминаю рассматриваемый фрейм данных в очень простой структуре из-за многих сложных структур.
@BehdadAhmadi Хорошо, конечно.
@BehdadAhmadi Хорошо, но попробуй объяснить, при чем тут Блэк?
если ЗАКРЫТЬ> ОТКРЫТЬ => ЦВЕТ = БЕЛЫЙ, а в противном случае ЧЕРНЫЙ, я делаю модель для ИНС
@BehdadAhmadi Извините ... но, на мой взгляд, ваш вопрос далеко не ясен. Я не могу вам помочь дальше, банкомат.
Большое вам спасибо за то, что вы уделили мне время. Вы мне очень помогли.
Можно ли создавать отдельные столбцы для каждого условия? Таким образом, вы можете сравнивать строки для истинного состояния @Behdad Ahmadi