对于二维数组,有时候需要类似于滑动窗口连续滚动选择数据,本文使用rolling()函数滚动选择数据。

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np

# 设置一个初始数据框
df1 = [1,2,3,4,5]
df2 = [2,3,4,5,6]
df3 = [3,4,5,6,7]
df4 = [4,5,6,7,8]
df = pd.DataFrame({'a':list(df1),'b':list(df2),'c':list(df3),'d':list(df4)})
print("input data:\n",df)

# 多列滚动函数
# handle对滚动的数据框进行处理

df_result = []
def handle(x,df,n):
  if x+n < df.shape[1] or x+n == df.shape[1]:      #当滚动框滚动到数据边界位置停止滚动
    df = df[:].iloc[ : , x : x+n]                  #使用iloc函数选择需要滚动操作的数据        
    df = np.array(df)
    df_result.append(df)                           #保存滚动操作选择的数据
    print("roll result:\n",df)
  return 1

# group_rolling 进行滚动 
# n:滚动的行数
# df:目标数据框
# name:要滚动的列名
def group_rolling(n,df):
  df_roll = pd.DataFrame({0:list(range(len(df)-n+1))})
  df_roll[0].rolling(window=1).apply(lambda x:handle(int(x[0]),df,n),raw=True)  #window:表示时间窗的大小

group_rolling(n=2,df=df)

df_result1 = np.array(df_result)
print("roll result saved:\n",df_result1)
print("df_result1:",df_result1.shape)

滚动选择的结果如下,将滚动结果保存在df_result1中构成尺寸为(3,5,2)数组。

 input data:
   a  b  c  d
0  1  2  3  4
1  2  3  4  5
2  3  4  5  6
3  4  5  6  7
4  5  6  7  8
roll result:
 [[1 2]
  [2 3]
  [3 4]
  [4 5]
  [5 6]]
roll result:
 [[2 3]
  [3 4]
  [4 5]
  [5 6]
  [6 7]]
roll result:
 [[3 4]
  [4 5]
  [5 6]
  [6 7]
  [7 8]]
roll result saved:
 [[[1 2]
   [2 3]
   [3 4]
   [4 5]
   [5 6]]

 [[2 3]
  [3 4]
  [4 5]
  [5 6]
  [6 7]]

 [[3 4]
  [4 5]
  [5 6]
  [6 7]
  [7 8]]]
df_result1: (3, 5, 2)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐