pandas 学习汇总10 - 统计:窗口函数rolling,expanding( tcy)

窗口函数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)
# 用途:提供扩展转换。累计计算,如累加求和

参考:<http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases>
说明:除 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.0

df.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: float64

df.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 6000

df.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: float64

df.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  


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值