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

У меня есть набор данных, структурированный так:

"Date","Time","Open","High","Low","Close","Volume"

Этот временной ряд представляет значения универсального фондового рынка.

Я хочу рассчитать разницу в процентах между двумя строками столбца «Закрыть» (на самом деле, я хочу знать, насколько стоимость акции увеличилась или уменьшилась; каждая строка представляет день).

Я сделал это с помощью цикла for (это ужасно при использовании pandas при проблеме больших данных), и я создаю правильные результаты, но в другом фрейме данных:

rows_number = df_stock.shape[0]

# The first row will be 1, because is calculated in percentage. If haven't any yesterday the value must be 1
percentage_df = percentage_df.append({'Date': df_stock.iloc[0]['Date'], 'Percentage': 1}, ignore_index=True)

# Foreach days, calculate the market trend in percentage
for index in range(1, rows_number):

    # n_yesterday : 100 = (n_today - n_yesterday) : x
    n_today = df_stock.iloc[index]['Close']
    n_yesterday = self.df_stock.iloc[index-1]['Close']
    difference = n_today - n_yesterday
    percentage = (100 * difference ) / n_yesterday

    percentage_df = percentage_df .append({'Date': df_stock.iloc[index]['Date'], 'Percentage': percentage}, ignore_index=True)

Как можноЯ рефакторину это, используя преимущества dataFrame api, удаляя цикл for и создавая новый столбец на месте?

Ответы [ 2 ]

0 голосов
/ 04 августа 2019

Я бы предложил сначала сделать столбец Date индексированием DateTime. Для этого вы можете использовать

df_stock = df_stock.set_index(['Date'])
df_stock.index = pd.to_datetime(df_stock.index, dayfirst=True)

Затем просто получить доступ к любой строке с определенным столбцом с использованием индексации по времени и дате и выполнять любые операции, какие хотите.Например, чтобы вычислить разницу в процентах между двумя строками столбца «Закрыть»

df_stock['percentage'] = ((df_stock['15-07-2019']['Close'] - df_stock['14-07-2019']['Close'])/df_stock['14-07-2019']['Close']) * 100

Вы также можете использовать цикл для выполнения операций для каждой даты или строки:

for Dt in df_stock.index:
0 голосов
/ 14 декабря 2018

Использование diff

(-df['Close'].diff())/df['Close'].shift()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...