Применение панд DataFrames, чтобы найти разницу между двумя локальными максимумами - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть следующий DataFrame, где index - дата, а Rate - указанная ставка в этот день.Я хотел бы рассчитать прибыль, мин показал, что эта ставка является локальным минимумом (как вы видите, даты не совсем соответствуют обычной логике), а max - это локальный максимум.Поэтому мне нужно покупать, когда есть значение в мин., И продавать, когда в макс.Теперь я хотел бы узнать прибыль, которая равна Row.max - Row (-1) .min

              Rate     min     max  profit
04.10.2016  1.1161  1.1161     NaN     NaN
05.10.2016  1.1211     NaN  1.1211  0.0050
07.10.2016  1.1140  1.1140     NaN     NaN
10.10.2016  1.1160     NaN  1.1160  0.0020
12.10.2016  1.1020  1.1020     NaN     NaN
13.10.2016  1.1038     NaN  1.1038  0.0018
19.10.2016  1.0979  1.0979     NaN     NaN
20.10.2016  1.0980     NaN  1.0980  0.0001
21.10.2016  1.0886  1.0886     NaN     NaN
24.10.2016  1.0891     NaN  1.0891  0.0005
25.10.2016  1.0872  1.0872     NaN     NaN
27.10.2016  1.0927     NaN  1.0927     NaN
28.10.2016  1.0922  1.0922     NaN     NaN

Мой текущий код выглядит следующим образом:

df = pandas.DataFrame.from_dict(exchange_rates, orient='index', dtype='float64', columns=['Rate'])
df['min'] = df.Rate[(df.Rate.shift(1) > df.Rate) & (df.Rate.shift(-1) > df.Rate)]
df['max'] = df.Rate[(df.Rate.shift(1) < df.Rate) & (df.Rate.shift(-1) < df.Rate)]
# df.replace(['NaN'], np.nan, inplace=True)
filtered_df = df[df['min'].notnull() | df['max'].notnull()]
filtered_df['profit'] = df['max'] - df['min'].shift(1)
print(filtered_df)

Но мой подходне доставляет последнюю прибыль.Что было бы предложением улучшить, поскольку сдвиг не работает?

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