在数据分析和时间序列数据处理中,经常需要执行滚动计算或滑动窗口操作。Pandas库提供了
本文将详细介绍Pandas中的
1. 引言
滚动计算与滑动窗口操作
滚动计算(Rolling Calculation)是一种数据处理技术,它在时间序列数据或数据框中执行基于滑动窗口的计算。这种技术通常用于计算移动平均、滚动标准差、滚动相关系数等统计指标。Pandas中的
2. Pandas的rolling方法
创建rolling对象
在Pandas中,要使用
创建rolling对象的基本语法如下:
rolling_obj = df['column_name'].rolling(window=window_size)
其中:
df['column_name'] 是数据框列的选择,表示我们要在哪个列上执行滚动计算。window_size 是窗口的大小,用于定义滚动窗口的大小。
常用参数
min_periods :指定每个窗口最小的非NaN值数量,用于处理边界效应。center :指示计算值的位置是窗口的中心还是右边缘。win_type :用于指定窗口类型,如矩形窗口或指数加权窗口。
3. 滚动计算示例
移动平均值
移动平均是滚动计算的常见应用之一。通过
以下是一个示例:
import pandas as pd # 创建示例数据框 data = {'value': [1, 2, 3, 4, 5]} df = pd.DataFrame(data) # 创建rolling对象并计算移动平均 rolling_mean = df['value'].rolling(window=3).mean() print(rolling_mean)
滚动标准差
滚动标准差用于测量数据的波动性。通过
以下是一个示例:
import pandas as pd # 创建示例数据框 data = {'value': [1, 2, 3, 4, 5]} df = pd.DataFrame(data) # 创建rolling对象并计算滚动标准差 rolling_std = df['value'].rolling(window=3).std() print(rolling_std)
滚动相关系数
滚动相关系数用于衡量两个变量之间的关联程度。通过
以下是一个示例:
import pandas as pd # 创建示例数据框 data = {'x': [1, 2, 3, 4, 5], 'y': [5, 4, 3, 2, 1]} df = pd.DataFrame(data) # 创建rolling对象并计算滚动相关系数 rolling_corr = df['x'].rolling(window=3).corr(df['y']) print(rolling_corr)
4. 自定义滚动函数
apply方法
除了内置的滚动函数,还可以使用
以下是一个示例:
import pandas as pd # 创建示例数据框 data = {'value': [1, 2, 3, 4, 5]} df = pd.DataFrame(data) # 创建rolling对象并应用自定义函数 def custom_function(data): return data.max() - data.min() result = df['value'].rolling(window=3).apply(custom_function) print(result)
自定义函数示例
自定义函数可以根据具体需求执行各种滚动计算。下面是两个示例函数,分别用于计算滚动差值和百分比变化。
计算滚动差值
以下自定义函数计算滚动差值,即当前数据点与前一个数据点之间的差值:
import pandas as pd # 创建示例数据框 data = {'value': [1, 3, 6, 10, 15]} df = pd.DataFrame(data) # 创建rolling对象并应用自定义函数 def calculate_rolling_difference(data): return data.diff() rolling_diff = df['value'].rolling(window=2).apply(calculate_rolling_difference) print(rolling_diff)
在这个示例中,使用
计算滚动百分比变化
以下自定义函数计算滚动百分比变化,即当前数据点与前一个数据点之间的百分比变化:
import pandas as pd # 创建示例数据框 data = {'value': [100, 120, 90, 110, 130]} df = pd.DataFrame(data) # 创建rolling对象并应用自定义函数 def calculate_rolling_percentage_change(data): previous_value = data.iloc[0] # 获取前一个数据点的值 return ((data - previous_value) / previous_value) * 100 rolling_percentage_change = df['value'].rolling(window=2).apply(calculate_rolling_percentage_change) print(rolling_percentage_change)
在这个示例中,获取前一个数据点的值,然后计算当前数据点与前一个数据点之间的百分比变化。
5. 窗口类型
固定窗口
在前面的示例中,使用的是固定窗口,窗口大小在整个计算过程中保持不变。
指数加权窗口
除了固定窗口外,Pandas还支持指数加权窗口。指数加权窗口将不同时间点的数据分配不同的权重,用于更敏感的滚动计算。
import pandas as pd # 创建示例数据框 data = {'value': [1, 2, 3, 4, 5]} df = pd.DataFrame(data) # 创建指数加权rolling对象并计算 rolling_ewm = df['value'].ewm (span=3).mean() print(rolling_ewm)
自定义窗口
如果需要自定义窗口,可以使用
以下是一个示例,展示如何使用
import pandas as pd # 创建示例数据框 data = {'value': [1, 2, 3, 4, 5, 6, 7, 8, 9]} df = pd.DataFrame(data) # 自定义窗口大小 window_sizes = [2, 3, 4] # 不同的窗口大小 # 使用不同窗口大小执行滚动计算 for window_size in window_sizes: rolling_mean = df['value'].rolling(window=window_size).mean() print(f'Rolling Mean with window size {window_size}: {rolling_mean} ')
在这个示例中,创建了一个示例数据框并定义了不同的窗口大小列表
6. 边界效应
边界模式
滚动计算存在边界效应,因为在窗口的两侧可能会存在不足窗口大小的数据。Pandas提供了不同的边界模式,包括"valid"、“same"和"full”,以处理边界效应。
解决边界效应问题
可以通过指定
7. 性能优化
为了提高性能,可以使用
总结
Pandas中的
---------------------------END---------------------------
题外话
感谢你能看到最后,给大家准备了一些福利!
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
??CSDN大礼包??:全网最全《Python学习资料》免费赠送??!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python兼职渠道推荐*
学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
??CSDN大礼包??:全网最全《Python学习资料》免费赠送??!(安全链接,放心点击)
若有侵权,请联系删除