pandas 学习汇总10 - 统计:窗口函数rolling,expanding( tcy)
发布日期:2021-06-29 14:48:04 浏览次数:2 分类:技术文章

本文共 2392 字,大约阅读时间需要 7 分钟。

窗口函数rolling,expanding   2018/12/4

           主要用在统计方面。

1.函数

df.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)# 用途:滚动窗口计算 按指定周期计算,如2周期求和df.expanding(min_periods=1, center=False, axis=0)# 用途:提供扩展转换。累计计算,如累加求和参考:
说明:除 sum 函数外还可使用其他统计函数如:count、mean、median、min、max、std、var、quantile、apply、cov、corr等

实例1:

data = { "date": pd.date_range("2018-12-04", periods=7),"income": [1000, 2000, np.nan, 3000, 4000, 5000, 6000]}df = pd.DataFrame(data=data)# 实例1:df.rolling(window=2, on="date").sum()#根据日期移动,选择2天求收入总和;# date income# 0 2018-12-04 NaN #2数求和第1个值为na# 1 2018-12-05 3000.0# 2 2018-12-06 NaN #第3个值为na# 3 2018-12-07 NaN #2数求和第1个值为na# 4 2018-12-08 7000.0# 5 2018-12-09 9000.0# 6 2018-12-10 11000.0df.rolling(window=2)['income'].sum() #先建一个窗口,然后默认根据标签移动,求2天的和# 窗口中默认需要的最小数据个数与窗口长度一致# 0 NaN# 1 3000.0# 2 NaN# 3 NaN# 4 7000.0# 5 9000.0# 6 11000.0# Name: income, dtype: float64df.rolling(window=2, on="date", min_periods=1).sum()# 窗口中需要最小数据个数为1# date income #原数值# 0 2018-12-04 1000.0#第1个值 1000# 1 2018-12-05 3000.0#2数求和1000+2000 2000# 2 2018-12-06 2000.0#2数据缺失为上一个数值 na# 3 2018-12-07 3000.0#第4个值 3000# 4 2018-12-08 7000.0#2数求和3000+4000 4000# 5 2018-12-09 9000.0#2数求和4000+5000 5000# 6 2018-12-10 11000.0#2数求和5000+6000 6000df.rolling(window=2, on="date", min_periods=2).sum()# 窗口中需要最小数据个数为2# date income #虽然不美观,但这种解释比较合理,不容易混乱。# 0 2018-12-04 NaN# 1 2018-12-05 3000.0# 2 2018-12-06 NaN# 3 2018-12-07 NaN# 4 2018-12-08 7000.0# 5 2018-12-09 9000.0# 6 2018-12-10 11000.0

实例2: 

# 求出多个结果(如求和和均值)df.rolling(window=2, min_periods=1)["income"].agg([np.sum, np.mean])# sum mean# 0 1000.0 1000.0# 1 3000.0 1500.0# 2 2000.0 2000.0# 3 3000.0 3000.0# 4 7000.0 3500.0# 5 9000.0 4500.0# 6 11000.0 5500.0# 传入一个字典,生成统计结果重列名df.rolling(window=2, min_periods=1)["income"].agg({"sum": np.sum, "mean": np.mean})# sum mean# 0 1000.0 1000.0# 1 3000.0 1500.0# 2 2000.0 2000.0# 3 3000.0 3000.0# 4 7000.0 3500.0# 5 9000.0 4500.0# 6 11000.0 5500.0

实例3: 

df.expanding(min_periods=1,axis=0)['income'].sum()# 输出 原数据# 0 1000.0 1000# 1 3000.0 2000 1000+2000# 2 3000.0 na 3000# 3 6000.0 3000 3000+3000# 4 10000.0 4000 6000+4000# 5 15000.0 5000 10000+5000# 6 21000.0 6000 15000+6000# Name: income, dtype: float64df.expanding(min_periods=2,axis=0)['income'].sum()# 输出 原数据# 0 NaN 1000# 1 3000.0 2000# 2 3000.0 na# 3 6000.0 3000# 4 10000.0 4000# 5 15000.0 5000# 6 21000.0 6000# Name: income, dtype: float64  

 

转载地址:https://chunyou.blog.csdn.net/article/details/84782304 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:pandas 学习汇总11 - 统计:pd.cut与pd.qcut数字按区间划分( tcy)
下一篇:pandas 学习汇总9 - Series系列,DataFrame数据帧 属性( tcy)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月12日 23时16分36秒