Как сравнить переменные цены открытия и закрытия в этом фрейме данных?

#pandas

#pandas

Вопрос:

У меня есть фрейм данных, в котором более 5 лет есть дата открытия, максимума, минимума, закрытия и дата каждой минуты. Я хочу вычислить новый столбец и хочу сравнить (закрыть — открыть) цену закрытия (этой минуты) с ценой открытия этого дня (9:15 утра). Как мне это сделать?

Ниже приведен скриншот файла. В J столбце у меня есть цена открытия дня, а K столбец — текущее закрытие. Я хочу вычислить разницу между закрытием и открытием. Этот файл содержит 0,7 миллиона строк и более 1000 дней, что означает, что цена открытия изменится 1000 раз.

У меня есть 200 таких похожих файлов, в которых мне нужно выполнить ту же процедуру, и, следовательно, цикл не является желаемым решением.

введите описание изображения здесь

Ответ №1:

Просто используйте groupby и transform . Обратите внимание, что при этом предполагается, что ваши данные отсортированы (например, первое значение каждой группы — это цена открытия).

 import pandas as pd
import datetime

# sample date
df1 = pd.DataFrame({'ticker': ['A']*5,
                    'date': pd.date_range('2020-01-01', '2020-01-01', periods=5),
                    'time': [datetime.time(9, 15), datetime.time(9, 16), datetime.time(9, 17),
                             datetime.time(9, 18), datetime.time(9, 19)],
                    'open': [1,2,3,4,5],
                    'close': [2,3,4,3,2]})

df2 = pd.DataFrame({'ticker': ['A']*5,
                    'date': pd.date_range('2020-01-02', '2020-01-02', periods=5),
                    'time': [datetime.time(9, 15), datetime.time(9, 16), datetime.time(9, 17),
                             datetime.time(9, 18), datetime.time(9, 19)],
                    'open': [3,2,3,4,5],
                    'close': [2,3,4,3,2]})

df = df1.append(df2)


# groupby the ticker and date then use transform to get the first value
# subtract the close from the first value of each group
df['diff'] = df['close'] - df.groupby(['ticker', 'date'])['open'].transform('first')

  ticker       date      time  open  close  diff
0      A 2020-01-01  09:15:00     1      2     1
1      A 2020-01-01  09:16:00     2      3     2
2      A 2020-01-01  09:17:00     3      4     3
3      A 2020-01-01  09:18:00     4      3     2
4      A 2020-01-01  09:19:00     5      2     1
0      A 2020-01-02  09:15:00     3      2    -1
1      A 2020-01-02  09:16:00     2      3     0
2      A 2020-01-02  09:17:00     3      4     1
3      A 2020-01-02  09:18:00     4      3     0
4      A 2020-01-02  09:19:00     5      2    -1