Создание нового столбца DataFrame и заполнение его оператором If - Python - PullRequest
0 голосов
/ 16 апреля 2020

Желаемым результатом будет новый столбец с заголовком «xOver», при этом значения в xOver определяются оператором if.

Значения xOver будут либо: 1, 2, либо NaN.

Значение будет равно 1, если: data ['Close']> data ['sma_5'] и data ['Close'] [- 1] Value будет NaN, если этот критерий не выполняется.

Значение будет равно 2, если выполняются другие критерии if и Statement (но для простоты мы можем просто игнорировать это для целей решения этой проблемы).

Это фрейм данных, который называется: данные. введите описание изображения здесь

Это код, который я пробовал до сих пор:

import pandas as pd 
import mplfinance as mpf
import numpy as np

data = pd.read_excel('SPY.xlsx', index_col=0, parse_dates=True)


#Create the moving avergae 
data['sma_5'] = data['Close'].rolling(33).mean()

print(data)

def xOver(data):

    if data['Close'] > data['sma_5'] and data['Close'][-1] < data['sma_5']:
        return 1
    else:
        np.nan

data['xOver'] = xOver

print(data)

, который возвращает это: введите описание изображения здесь

SPY.xlsx

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Я решил эту проблему с решением:

data['xOver'] = np.where((data['Close'].shift(+2) < data['sma_5'].shift(+1)) 
                         & (data['Close'].shift(+1) > data['sma_5'].shift(+1))
                         & (data['Close'] > data['sma_5'].shift(+1)),
                         data['sma_5'],np.nan)
0 голосов
/ 16 апреля 2020

IIU C, Использование:

import numpy as np

m = (data['Close'] > data['sma_5']) & (data['Close'][-1] < data['sma_5'])
data["xOver"] = np.where(m, 1, np.nan)
...