Python Pandas-使用for循环将较大的数据帧分为较小的数据帧
同样,一个python新手——但不断学习 我有一个数据框架如下: 打印标签上方和下方各一行=QQQPython 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
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)]