Python Pandas-使用for循环将较大的数据帧分为较小的数据帧

Python Pandas-使用for循环将较大的数据帧分为较小的数据帧,python,pandas,for-loop,dataframe,Python,Pandas,For Loop,Dataframe,同样,一个python新手——但不断学习 我有一个数据框架如下: 打印标签上方和下方各一行=QQQ timestamp close high low open tags vol new_column 719 2002-11-13 54.2400 55.9300 54.1100 55.3600 None 536 0.002 720 2002-11-14 55.9900 57.0000 55.8700 5

同样,一个python新手——但不断学习

我有一个数据框架如下:

打印标签上方和下方各一行=QQQ

       timestamp    close    high     low     open    tags   vol  new_column
719   2002-11-13  54.2400  55.9300  54.1100  55.3600  None  536    0.002    
720   2002-11-14  55.9900  57.0000  55.8700  56.9900   QQQ  391    0.032    
721   2002-11-15  56.6000  56.9200  55.6700  56.6900  None  387    0.010    
3204  2012-09-26  30.2800  30.6000  30.0400  30.1650  None  546   -0.021    
3205  2012-09-27  30.1700  30.4000  29.8900  30.1600   QQQ  471   -0.003    
3206  2012-09-28  30.1800  30.2600  29.7400  29.7600  None  542    0.0003     
3534  2014-01-22  36.2600  36.3200  35.7500  35.9300  None  219   -0.015    
3535  2014-01-23  36.0900  36.1300  35.5200  36.0550   QQQ  430   -0.004    
3536  2014-01-24  37.4500  37.5500  36.5300  36.8050  None  763    0.037
如何创建具有唯一名称的“n”(在本例中为3)数据帧,该数据帧由位于tags=QQQ上方和下方的数据组成?
我正在考虑使用for循环,但到目前为止还没有取得任何成功。

首先创建一系列标记,用于标识数据帧的第一行:

marks = df['tags'].shift(-1)
将“无”转换为“南”(用于进一步填充),将“QQQ”转换为“1”(用于进一步计数):

计算累积总和并填补空白:

marks = marks.cumsum().fillna(method='ffill')
最后,根据标记分组,但仅从每个片段中取出前三行,以防QQQ块之间存在间隙:

df_list = [x.iloc[:3] for _,x in df.groupby(marks)]

这确实假设来自
QQQ
±1
没有留下任何空白,但如果是这样的话,那么你可以简单地按
3
分组,这可能更容易
df_列表=[x代表uuu,x在df.groupby(np.arange(len(df))/3)]
@AChampion查看更新的答案(不再假设连续性)。看起来不错,很难说OP是否有任何连续性问题,或者简单地按3分组是否可以解决OPs问题。@AChampion将您的评论作为单独的答案发表,以防万一。非常感谢您的回复。为了回答上面的问题,我需要从中创建3个不同的数据帧,它最多可以是N,因为我拥有的数据超过25000行。没有连续性问题,只需按3分组即可解决问题。我只需要有3个或n个新的数据帧,我可以在这些数据帧上执行其他计算,比如QQQ之前的平均值和QQQ之后的平均值等等@迪兹
df_list = [x.iloc[:3] for _,x in df.groupby(marks)]