pandas如何计算移动平均值
作者:神出鬼没,指的就是我!
在处理金融数据分析时,常需计算移动平均值。遇到数据不足导致结果为NAN问题,可使用pandas中rolling函数的min_periods参数。设置min_periods=1即可解决,它允许窗口中的非空观测值少于窗口大小时也能计算均值,确保数据不足时也能得出结果
pandas计算移动平均值
本人遇到遇到一个任务,计算同月份合约当天各合约总持仓量的移动平均值。
立刻写下了这个函数:
group = df.groupby(['合约系列','date']) f = pd.DataFrame(group['持仓量'].sum().rolling(20).mean())
上交后,提出要求,不行,这个数据不行,存在一些数据,因为不足20天,导致结果为NAN。
一开始没想到思路,然后就问问群里的大佬,大佬给的第一个建议,写个功能函数。但是因为数据比较复杂,非连续数据,光是分类就很难,就继续询问。
直到一位大佬给了个答案:
group = df.groupby(['合约系列','date']) f = pd.DataFrame(group['持仓量'].sum().rolling(20,min_periods = 1).mean())
min_periods:#表示窗口最少包含的观测值为1
意味着数据不满20天的,自动有一天算一天,计算均值。如第19天数据,此时显示的结果就是前面19天的均值。
pandas求滑动平均值
df.rolling(3, center=True).mean()
如果求最小值、最大值、求和等,可以改变最后面的函数,比如
df.rolling(3, center=True).min() df.rolling(3, center=True).max() df.rolling(3, center=True).sum()
其他参数:
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
window
:选几个数求滑动平均值center
:true-以当前数为中心win_type
:如果没有特殊指定,所有数的权重是一样的
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。