Python 确定特定时间内的最小值和最大值

Python 确定特定时间内的最小值和最大值,python,pandas,time-series,Python,Pandas,Time Series,我有一个类似于以下的数据帧: df = pd.DataFrame({'ticker':['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], 'date':['2020-05-01 09:30:00', '2020-05-01 09:31:00', '2020-05-01 09:32:00', '2020-05-01 09:33:00', '2020

我有一个类似于以下的数据帧:

df = pd.DataFrame({'ticker':['A', 'A', 'A', 'A', 'A', 
                             'B', 'B', 'B', 'B', 'B'], 
                   'date':['2020-05-01 09:30:00', '2020-05-01 09:31:00', '2020-05-01 09:32:00', '2020-05-01 09:33:00', '2020-05-01 09:34:00', 
                           '2020-05-01 09:30:00', '2020-05-01 09:31:00', '2020-05-01 09:32:00', '2020-05-01 09:33:00', '2020-05-01 09:34:00'], 
                   'datetime':['2020-05-01 09:30:00', '2020-05-01 09:31:00', '2020-05-01 09:32:00', '2020-05-01 09:33:00', '2020-05-01 09:34:00', 
                               '2020-05-01 09:30:00', '2020-05-01 09:31:00', '2020-05-01 09:32:00', '2020-05-01 09:33:00', '2020-05-01 09:34:00'], 
                   'low':[10.00, 11.00, 12.00, 11.00, 11.50,
                          15.00, 14.00, 13.00, 12.00, 12.50], 
                   'high':[10.25, 11.25, 12.25, 11.25, 11.75,
                          15.25, 14.25, 13.25, 12.25, 12.75], 
                   'close':[10.20, 11.20, 12.20, 11.20, 11.70,
                          15.20, 14.20, 13.20, 12.20, 12.75]})

df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M')
df['datetime'] = pd.to_datetime(df['datetime'], format='%Y-%m-%d %H:%M')
df = df.set_index(['ticker', 'date'])
我试图找出如何在我的数据框中创建列,列中包含给定时间点每个股票代码的最低和最高价格。也就是说,在当天的第一次和给定行的当前时间之间

  • 例如,在09:32:00,股票代码B的最低价格为13.0(发生在该分钟内),但股票代码a的最低价格为10.0(发生在09:30:00)
  • 同样地,在09:32:00,股票代码B的最高价格为11.25(发生在那一分钟),但股票代码a的最高价格为15.25(发生在09:30:00的公开赛)
我尝试了各种不同的.groupby和.loc语句,但似乎没有找到正确的


任何帮助都将不胜感激

我不确定您当然想要什么,但我认为以下代码可以工作:

df[['date','low']].loc[df['ticker']=='A'].min()
输出:

date    2020-05-01 09:30:00
low                      10
您无需将索引设置为要与
.min()
.max()
组合使用的
股票代码和
日期,例如:

df.groupby('ticker')[[['low'、'high'、'close']]扩展().min()

它基本上类似于
.rolling()
,但它的长度不断增加,而不是固定大小的窗口。

这非常有效!我只需要在groupby语句中添加一个日期列,就可以每天进行设置。
                                    low   high  close
ticker ticker date                                   
A      A      2020-05-01 09:30:00  10.0  10.25   10.2
              2020-05-01 09:31:00  10.0  10.25   10.2
              2020-05-01 09:32:00  10.0  10.25   10.2
              2020-05-01 09:33:00  10.0  10.25   10.2
              2020-05-01 09:34:00  10.0  10.25   10.2
B      B      2020-05-01 09:30:00  15.0  15.25   15.2
              2020-05-01 09:31:00  14.0  14.25   14.2
              2020-05-01 09:32:00  13.0  13.25   13.2
              2020-05-01 09:33:00  12.0  12.25   12.2
              2020-05-01 09:34:00  12.0  12.25   12.2