Python сложение элементов попарно из разных массивов
я понимаю, что python ошибиться не может, но какаято абсурдная арифметика получается, посмотрите плз. Я получил два массива m_ и m__. Теперь я хочу попарно их сложить элементы и получить новый список.
Вот сюда я загрузил исходный файл с данными https://yadi.sk/d/hVZw12w-gI38iA
На выходе я хочу получить массив sum_m, который попарно суммирует значения элементов из массивов m_ и m__.
Вот код
import pandas as pd
import collections
""" Чтение файла """
file = r"C:\si2.csv"
df = pd.read_csv(file, sep=";")
""" Добавление нового столбца в датафрейм (разница) """
df["<DELTA>"] = df["<CLOSE>"] - df["<OPEN>"]
print(df.head(5))
massiv = []
for i in df["<DELTA>"]:
massiv.append(i)
print(massiv)
print(len(massiv))
print("----------------------------------------")
""" Создание массивов в помощь для поиска индексов смены свечей """
m_ = []
m__ = []
for i in massiv:
if i >= 0:
m_.append(1)
else:
m_.append(-1)
print(" Первый массив", m_)
print(len(m_))
m__ = m_
m__.insert(0, 0)
m__ = m__[0: len(massiv)]
print(" Второй массив", m__)
print(len(m__))
print("----------------------------------------")
""" Поиск индексов смены свечей """
sum_m = [m_ + m__ for m_, m__ in zip(m_, m__)]
print(sum_m)
print(len(sum_m))
Вот, что получается на выходе, какая то непонятная арифметика.
Вот тут наглядно покажу ,что хочу от алгоритма на первых 4-ех элементах
Мне кажется ответ лежит гдето на поверхности, но я его упорно не вижу.
Ответы (2 шт):
m__ = m_ ошибка в этой строчке
m__ не стал присваивать массив m_, а просто заново прогнал через for и все получилось
import numpy as np
df["m_"] = np.where(df["<DELTA>"] >= 0, 1, -1)
df["m__"] = df["m_"].shift().fillna(0)
res = df.eval("res = m_ + m__")
результат:
In [13]: res
Out[13]:
<OPEN> <HIGH> <LOW> <CLOSE> <DELTA> m_ m__ res
0 64950 65000 64831 64898 -52 -1 0.0 -1.0
1 64881 64898 64836 64870 -11 -1 -1.0 -2.0
2 64872 64872 64758 64788 -84 -1 -1.0 -2.0
3 64786 64835 64773 64830 44 1 -1.0 0.0
4 64840 64915 64798 64899 59 1 1.0 2.0
... ... ... ... ... ... .. ... ...
4082 71060 71130 71028 71088 28 1 -1.0 0.0
4083 71086 71148 71014 71039 -47 -1 1.0 0.0
4084 71039 71061 70879 70909 -130 -1 -1.0 -2.0
4085 70907 71064 70905 71014 107 1 -1.0 0.0
4086 71013 71104 70976 71097 84 1 1.0 2.0
[4087 rows x 8 columns]
