Лучший способ сделать это в Pandas? - PullRequest
0 голосов
/ 25 апреля 2020

Я просто ищу несколько советов о том, как сделать это лучше. Я просто проводил некоторые базовые исследования, чтобы сравнить открытие понедельника и минимум. Кодовый код возвращает два списка, один с возвратами (закрытие в понедельник - открытие / открытие в понедельник) и список, в котором только 1 и 0 отражают, был ли возврат положительным или отрицательным.

Пожалуйста, посмотрите, я уверен, что есть лучший способ сделать это в pandas, но я просто не знаю как.

#Monday only
m_list = [] #results list
h_list = [] #hit list (close-low > 0)
n=0 #counter variable
for t in history.index:
    if datetime.datetime.weekday(t[1]) == 1: #t[1] is the timestamp in multi index (if timestemp is a Monday)
    x = history.ix[n]['open']-history.ix[n]['low']
    m_list.append((history.ix[n]['open']-history.ix[n]['low'])/history.ix[n]['open'])
    if x > 0:
        h_list.append(1)
    else:
        h_list.append(0)
    n += 1 #add to index counter
else:
    n += 1  #add to index counter 

print("Mean: ", mean(m_list), "Max: ", max(m_list),"Min: ", 
  min(m_list), "Hit Rate: ", sum(h_list)/len(h_list))

1 Ответ

1 голос
/ 25 апреля 2020

Вы можете сделать это прямо:

(history['open']-history['low'])>0

Это даст вам true для строк, где open больше и flase, где low больше.

И если вы хотите 1,0, вы можете умножить вышеприведенный оператор на 1.

((history['open']-history['low'])>0)*1

Пример

import numpy as np 
import pandas as pd

df = pd.DataFrame({'a':np.random.random(10),
                  'b':np.random.random(10)})

Печать фрейм данных:

print(df)

    a   b
0   0.675916    0.796333
1   0.044582    0.352145
2   0.053654    0.784185
3   0.189674    0.036730
4   0.329166    0.021920
5   0.163660    0.331089
6   0.042633    0.517015
7   0.544534    0.770192
8   0.542793    0.379054
9   0.712132    0.712552

Чтобы создать новый столбец compare, где он равен 1, если a больше, и 9, если b больше:

df['compare'] = (df['a']-df['b']>0)*1

, это будет добавить новый столбец compare:

    a   b   compare
0   0.675916    0.796333    0
1   0.044582    0.352145    0
2   0.053654    0.784185    0
3   0.189674    0.036730    1
4   0.329166    0.021920    1
5   0.163660    0.331089    0
6   0.042633    0.517015    0
7   0.544534    0.770192    0
8   0.542793    0.379054    1
9   0.712132    0.712552    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...