再次是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循环,但到目前为止尚未取得任何成功。
答案 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)]