数据帧上的Python循环

数据帧上的Python循环,python,dataframe,loops,Python,Dataframe,Loops,我有一个由股票价格组成的数据框。一年内,每种股票、日期、价格各1行。因此,每个股票代码有365行。结构有点像这样: TICKER PRICE_DATE OPEN_PRICE 0 IBM 20201113 115.19 1 IBM 20201112 115.63 2 IBM 20201111 118.12 3 IBM 20201110 116.69 4 IBM 202

我有一个由股票价格组成的数据框。一年内,每种股票、日期、价格各1行。因此,每个股票代码有365行。结构有点像这样:

    TICKER  PRICE_DATE  OPEN_PRICE
0      IBM    20201113      115.19
1      IBM    20201112      115.63
2      IBM    20201111      118.12
3      IBM    20201110      116.69
4      IBM    20201109      117.88
.
.
.
#      AAPL   20201113      115.19
#      AAPL   20201112      115.63
#      AAPL   20201111      118.12
#      AAPL   20201110      116.69
#      AAPL   20201109      117.88
我需要做的是:对于每个股票,循环前3天,并将开盘价与前一天进行比较。基本上是这样的:如果第1天<第2天<第3天,那么

所以,我需要3行IBM,下一次迭代我需要3行AAPL,下一次迭代

有什么简单的方法吗?或者,也许我应该将其转换为不同的格式,以便访问AAPL、价格要素1、价格要素2、价格要素3等?

data.csv:

TICKER  PRICE_DATE  OPEN_PRICE
IBM    20201113      115.19
IBM    20201112      115.63
IBM    20201111      118.12
IBM    20201110      116.69
IBM    20201109      117.88
AAPL   20201113      115.19
AAPL   20201112      115.63
AAPL   20201111      118.12
AAPL   20201110      116.69
AAPL   20201109      117.88
INTC   20201113      115.19
INTC   20201112      115.63
INTC   20201111      118.12
INTC   20201110      116.69
INTC   20201109      117.88
代码:


预期的输出是什么?我想成为一个表来遍历数据帧(或者可能我需要转换成一个词汇或列表??),并获取每个代码的前3个元素。就像AAPL[0]。价格,AAPL[1]。价格,AAPL[2]。价格。下一个也一样。因此,我不必遍历每一个ticker,365次,取前3行,我可以将它转换成不同的结构,只访问我需要的元素吗?比如
df.groupby('ticker')。first(3)。groupby('ticker')
?我必须缺少一些东西:d=df.groupby('ticker')。first(3)。groupby('ticker'))我得到这个错误:这是一个groupby对象。它允许将函数和过滤器应用于组,例如,这里采用的是前三个值。然而,在第二次groupby之后,不清楚您想要得到什么结果,这让我们回到我的第一个问题
import pandas as pd
import numpy as np

df = pd.read_csv('data.csv', delimiter='\s+')
print(df, '\n')

arr_t = np.dtype([('TICKER','S4')]) 
arr_t = df['TICKER'].unique()

df = df.set_index('TICKER')
print(df)
rows_per_ticker = df.loc[arr_t[0]].PRICE_DATE.count()

r = 0
while r < rows_per_ticker:
    for i in range(0,len(arr_t)):
        print(df.loc[arr_t[i]].iloc[r:r+3, :])
    r+=3
   TICKER  PRICE_DATE  OPEN_PRICE
0     IBM    20201113      115.19
1     IBM    20201112      115.63
2     IBM    20201111      118.12
3     IBM    20201110      116.69
4     IBM    20201109      117.88
5    AAPL    20201113      115.19
6    AAPL    20201112      115.63
7    AAPL    20201111      118.12
8    AAPL    20201110      116.69
9    AAPL    20201109      117.88
10   INTC    20201113      115.19
11   INTC    20201112      115.63
12   INTC    20201111      118.12
13   INTC    20201110      116.69
14   INTC    20201109      117.88

        PRICE_DATE  OPEN_PRICE
TICKER
IBM       20201113      115.19
IBM       20201112      115.63
IBM       20201111      118.12
IBM       20201110      116.69
IBM       20201109      117.88
AAPL      20201113      115.19
AAPL      20201112      115.63
AAPL      20201111      118.12
AAPL      20201110      116.69
AAPL      20201109      117.88
INTC      20201113      115.19
INTC      20201112      115.63
INTC      20201111      118.12
INTC      20201110      116.69
INTC      20201109      117.88
        PRICE_DATE  OPEN_PRICE
TICKER
IBM       20201113      115.19
IBM       20201112      115.63
IBM       20201111      118.12
        PRICE_DATE  OPEN_PRICE
TICKER
AAPL      20201113      115.19
AAPL      20201112      115.63
AAPL      20201111      118.12
        PRICE_DATE  OPEN_PRICE
TICKER
INTC      20201113      115.19
INTC      20201112      115.63
INTC      20201111      118.12
        PRICE_DATE  OPEN_PRICE
TICKER
IBM       20201110      116.69
IBM       20201109      117.88
        PRICE_DATE  OPEN_PRICE
TICKER
AAPL      20201110      116.69
AAPL      20201109      117.88
        PRICE_DATE  OPEN_PRICE
TICKER
INTC      20201110      116.69
INTC      20201109      117.88