Многие заявления If в пандах - PullRequest
0 голосов
/ 10 июня 2018

У меня есть стоковые данные.И у меня есть много операторов if, которые нужно выполнить для присвоения значения.

c1 = np.where((blackCondition & whitePCondition) & (close_gt_oP & open_ge_cP),'UP',None)
c2 = np.where((blackCondition & whitePCondition) & (open_lt_cP & close_le_oP),'DOWN',None)

c3 = np.where((blackCondition & whitePCondition) & (close_gt_oP & open_lt_cP),'OUTSIDE',None)
c4 = np.where((blackCondition & whitePCondition) & (close_le_oP & open_ge_cP),'INSIDE',None)
#IF2
c5 = np.where((blackCondition & blackPCondition) & (open_gt_oP & close_ge_cP),'UP',None)
c6 = np.where((blackCondition & blackPCondition) & (close_lt_cP & open_le_oP),'DOWN',None)

c7 = np.where((blackCondition & blackPCondition) & (open_gt_oP & close_lt_cP),'OUTSIDE',None)
c8 = np.where((blackCondition & blackPCondition) & (open_le_oP & close_ge_cP),'INSIDE',None)
#IF3

c9 = np.where((whiteCondition & whitePCondition) & (close_gt_cP & open_ge_oP),'UP',None)
c10 = np.where((whiteCondition & whitePCondition) & (open_lt_oP & close_le_cP),'DOWN',None)

c11 = np.where((whiteCondition & whitePCondition) & (close_gt_cP & open_lt_oP),'OUTSIDE',None)
c12 = np.where((whiteCondition & whitePCondition) & (close_le_cP & open_ge_oP),'INSIDE',None)
#IF4
c13 = np.where((whiteCondition & blackPCondition) & (open_gt_cP & close_ge_oP),'UP',None)
c14 = np.where((whiteCondition & blackPCondition) & (close_lt_oP & open_le_cP),'DOWN',None)

c15 = np.where((whiteCondition & blackPCondition) & (open_gt_cP & close_lt_oP),'OUTSIDE',None)
c16 = np.where((whiteCondition & blackPCondition) & (open_le_cP & close_ge_oP),'INSIDE',None)

Как я могу присвоить ИСТИННОЕ ЗНАЧЕНИЕ оператора столбцу?

df ['pos'] = ЕСЛИ ЛЮБОЕ ИЗ ЭТОГО ЗАЯВЛЕНИЯ ИСТИНА

ex:

if(c1) => df['pos'] = TRUE_CONDITION_OF_C1

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Я думаю, что нужно numpy.select для установки значений по условиям, также я пытаюсь переназначить те же условия переменным m1-m3 для лучшей производительности:

m1 = (blackCondition & whitePCondition)
m2 = (blackCondition & blackPCondition)
m3 = (whiteCondition & whitePCondition)
#same like m1
#m4 = (whitePCondition & blackCondition)

c1 = m1 & (close_gt_oP & open_ge_cP)
c2 = m1 & (open_lt_cP & close_le_oP)
c5 = m2 & (open_gt_oP & close_ge_cP)
c6 = m2 & (close_lt_cP & open_le_oP)
c9 = m3 & (close_gt_cP & open_ge_oP)
c10 = m3 & (open_lt_oP & close_le_cP)
c13 = m1 & (open_gt_cP & close_ge_oP)
c14 = m1 & (close_lt_oP & open_le_cP)

c3 = m1 & (close_gt_oP & open_lt_cP)
c4 = m1 & (close_le_oP & open_ge_cP)
c7 = m2 & (open_gt_oP & close_lt_cP)
c8 = m2 & (open_le_oP & close_ge_cP)
c11 = m3 & (close_gt_cP & open_lt_oP)
c12 = m3 & (close_le_cP & open_ge_oP)
c15 = m1 & (open_gt_cP & close_lt_oP)
c16 = m1 & (open_le_cP & close_ge_oP)

Условия цепочки по | для OR:

cup = c1 | c5 | c9 | c13
cdown = c2 | c6 | c10 | c14

coutside = c3 | c7 | c11 | c15
cinside = c4 | c8 | c12 | c16

df['pos'] = np.select([cup, cdown, coutside, cinside], 
                      ['UP','DOWN','OUTSIDE','INSIDE'], default=None)
0 голосов
/ 10 июня 2018

С пандами я не знаю очень элегантного способа сделать это.Однако есть несколько вариантов.

Вы можете периодически использовать .loc[] с маской, которая выглядит ужасно, или вы можете использовать метод .map() или .apply().

Следующий примерпредполагается, что маска нигде не равна нулю и имеет ту же форму, что и сам df.

df['pos'] = (
    (blackCondition & whitePCondition)
    & (close_gt_oP & open_ge_cP)
).map({True: "UP", False: "DOWN"})

Это будет сделано только в первой строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...