熊猫-使用for循环将较大的数据帧切成较小的数据帧

时间:2018-07-29 17:21:35

标签: python pandas for-loop dataframe

再次是python新手-但不断学习。

我下面有一个DataFrame:

在标签= 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个),该数据帧由在tag = QQQ上方和下方的数据组成? 我正在考虑使用for循环,但到目前为止尚未取得任何成功。

1 个答案:

答案 0 :(得分:0)

首先创建一系列标记,这些标记将用于识别数据框的第一行:

marks = df['tags'].shift(-1)

将“无”转换为NaN(进一步填充),将QQQ转换为1(进一步计数):

marks[marks=='None'] = np.nan # I assume that 'None' is a string
marks[marks=='QQQ'] = 1

计算累计和并填补空白:

marks = marks.cumsum().fillna(method='ffill')

最后,按标记分组,但如果QQQ块之间存在间隙,则仅取每个片段的前三行:

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