只需使用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