Как проверить условие на существующем фрейме данных и поместить результаты в новый столбец? - PullRequest
0 голосов
/ 14 июля 2020
      ID   Open  Close     SMA        EMA
30  UNITY  11.50  11.53  12.576  12.715570
31  UNITY  11.44  11.34  12.399  12.626823
32  UNITY  11.26  11.74  12.273  12.569609
33  UNITY  11.72  11.61  12.150  12.507699
34  UNITY  11.51  11.43  11.994  12.438170
35  UNITY  11.85  11.17  11.844  12.356352

Я хочу протестировать следующий код

df[(df.SMA >= df.EMA) & 
    (((df.Open <= df.SMA) & (df.Close >= df.EMA)) 
        | ((df.Close >= df.EMA) & (df.Open <= df.EMA)) 
        | ((df.Open >= df.SMA) & (df.Close <= df.SMA)))]

в моем фрейме данных и создать новый столбец «TAZ», который для каждой строки отображает «100», если условие выполняется в противном случае » 0 '.

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

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы можете использовать np.where вот так:

# filter condition
cond = (df.SMA >= df.EMA) & (((df.Open <= df.SMA) & (df.Close >= df.EMA)) | ((df.Close >= df.EMA) & (df.Open <= df.EMA)) | ((df.Open >= df.SMA) & (df.Close <= df.SMA)))

df['TAZ'] = np.where(cond, 100, 0)
0 голосов
/ 14 июля 2020

Вы можете просто создать новый столбец TAZ с выводом вашего кода. Умножив результат на 100, вы получите 100, если условие выполнено, в противном случае оно будет 0. Если вы хотите, чтобы он был как строка, вы можете преобразовать его, используя astype()

df['TAZ'] = ((df.SMA >= df.EMA) & (((df.Open <= df.SMA) & (df.Close >= df.EMA)) | ((df.Close >= df.EMA) & (df.Open <= df.EMA)) | ((df.Open >= df.SMA) & (df.Close <= df.SMA)))) * 100
...