如何比较此数据框中的开盘价和收盘价变量?

时间:2020-09-21 15:08:51

标签: pandas

我有一个数据框,其中包含超过5年的每分钟的开盘价,最高价,最低价,收盘价和日期。我想计算一个新列,并想将(该分钟的)收盘价与当天(上午9:15)的开盘价进行比较。我该怎么办?

下面是文件的屏幕截图。在J列中,有当日的开盘价,在K列中,是运行的收盘价。我想计算关闭和打开之间的差异。该文件有70万行,超过1000天,这意味着公开价格将更改1000次。

我有200个类似的文件,需要执行相同的步骤,因此循环不是理想的解决方案。

enter image description here

1 个答案:

答案 0 :(得分:1)

只需使用groupbytransform。请注意,这是假设您的数据已排序(例如,每个组的第一个值是开盘价)。

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