在Python中切片和迭代数据帧

时间:2017-10-24 13:01:54

标签: python python-3.x dataframe

我有一个如下所示的DataFrame:

    Date    Sell    Buy
    43016.49372 52.04   52.76
    43016.4936  52.04   52.76
    43016.49343 52.01   52.73
    43016.49339 52.02   52.74
    43016.49288 52.01   52.73
    43016.49278 52.02   52.74
    43016.4923  52.01   52.73
    43016.49217 52.06   52.78
    43016.49194 52.06   52.78
    43016.4917  52.06   52.78
    43016.49162 52.06   52.78

我想通过获取之前的最后10行为每一行创建一个DataFrame。 然后我想进行一些计算,比如买卖。

我尝试过以下代码:

for row in original_df.iterrows():
    a = row
    b = row + 10
    slicing_test = original_df.iloc[a:b,]
    print(slicing_test)

还有这一个:

for row in original_df.iterrows():
     slicing_test = original_df.iloc[row:row+1,] 

它没有用。

3 个答案:

答案 0 :(得分:0)

你可以创建一个空的数据集并尝试迭代地追加到下一行或前10行(保持边界检查)。

答案 1 :(得分:0)

row是你的for循环中的一个元组,你可以访问它的第一个元素,即row-index:

for row in df.iterrows():
 a=row[0]
 b=a+10

 slicing_test = df.iloc[a:b,]
 print (slicing_test)

答案 2 :(得分:0)

如果您想明确掌握窗口或想要执行一些复杂的计算,那么您可以这样做:

offset = 10
for ind,_ in df.iterrows():
    print(df.iloc[ind:ind+offset,:])

但是如果您正在谈论的计算是一些主流计算,例如sum()或mean(),或者它已经在numpy库中定义,那么最好的方法是使用pandas.DataFrame.rolling 。正如它所说:

  

返回:为特定操作

分类的Window或Rolling子类

所以你之后可以使用.apply

相关问题