16-Python Pandas聚合函数

Python Pandas聚合函数

窗口函数可以与聚合函数一起使用,聚合函数指的是对一组数据求总和、最大值、最小值以及平均值的操作。

应用聚合函数

首先让我们创建一个 DataFrame 对象,然后对聚合函数进行应用。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(5,4),index = pd.date_range('12/14/2020', periods=5),columns = ['A', 'B', 'C', 'D'])
print (df)
#窗口大小为3,min_periods 最小观测值为1
r = df.rolling(window=3,min_periods=1)
print(r)

输出结果:

             A   B   C   D
2020-12-14   0   1   2   3
2020-12-15   4   5   6   7
2020-12-16   8   9  10  11
2020-12-17  12  13  14  15
2020-12-18  16  17  18  19
Rolling [window=3,min_periods=1,center=False,axis=0,method=single]
1) 对整体聚合

您可以把一个聚合函数传递给 DataFrame,示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(5,4),index = pd.date_range('12/14/2020', periods=5),columns = ['A', 'B', 'C', 'D'])
print (df)
#窗口大小为3,min_periods 最小观测值为1
r = df.rolling(window=3,min_periods=1)
print(r.aggregate(np.sum))
# 以下方式也可以
# print(r.sum())

输出结果:

             A   B   C   D
2020-12-14   0   1   2   3
2020-12-15   4   5   6   7
2020-12-16   8   9  10  11
2020-12-17  12  13  14  15
2020-12-18  16  17  18  19
               A     B     C     D
2020-12-14   0.0   1.0   2.0   3.0
2020-12-15   4.0   6.0   8.0  10.0
2020-12-16  12.0  15.0  18.0  21.0
2020-12-17  24.0  27.0  30.0  33.0
2020-12-18  36.0  39.0  42.0  45.0
2) 对任意某一列聚合
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(5,4),index = pd.date_range('12/14/2020', periods=5),columns = ['A', 'B', 'C', 'D'])
print (df)
#窗口大小为3,min_periods 最小观测值为1
r = df.rolling(window=3,min_periods=1)
print(r['B'].aggregate(np.sum))

输出结果:

             A   B   C   D
2020-12-14   0   1   2   3
2020-12-15   4   5   6   7
2020-12-16   8   9  10  11
2020-12-17  12  13  14  15
2020-12-18  16  17  18  19
2020-12-14     1.0
2020-12-15     6.0
2020-12-16    15.0
2020-12-17    27.0
2020-12-18    39.0
Freq: D, Name: B, dtype: float64
3) 对多列数据聚合
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(5,4),index = pd.date_range('12/14/2020', periods=5),columns = ['A', 'B', 'C', 'D'])
print (df)
#窗口大小为3,min_periods 最小观测值为1
r = df.rolling(window=3,min_periods=1)
print(r['B','C'].aggregate(np.sum))

输出结果:

             A   B   C   D
2020-12-14   0   1   2   3
2020-12-15   4   5   6   7
2020-12-16   8   9  10  11
2020-12-17  12  13  14  15
2020-12-18  16  17  18  19
               B     C
2020-12-14   1.0   2.0
2020-12-15   6.0   8.0
2020-12-16  15.0  18.0
2020-12-17  27.0  30.0
2020-12-18  39.0  42.0
4) 对单列应用多个函数
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(5,4),index = pd.date_range('12/14/2020', periods=5),columns = ['A', 'B', 'C', 'D'])
print (df)
#窗口大小为3,min_periods 最小观测值为1
r = df.rolling(window=3,min_periods=1)
print(r['B'].aggregate([np.sum,np.mean]))

输出结果:

             A   B   C   D
2020-12-14   0   1   2   3
2020-12-15   4   5   6   7
2020-12-16   8   9  10  11
2020-12-17  12  13  14  15
2020-12-18  16  17  18  19
             sum  mean
2020-12-14   1.0   1.0
2020-12-15   6.0   3.0
2020-12-16  15.0   5.0
2020-12-17  27.0   9.0
2020-12-18  39.0  13.0
5) 对不同列应用多个函数
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(5,4),index = pd.date_range('12/14/2020', periods=5),columns = ['A', 'B', 'C', 'D'])
print (df)
#窗口大小为3,min_periods 最小观测值为1
r = df.rolling(window=3,min_periods=1)
print(r['B','C'].aggregate([np.sum,np.mean]))

输出结果:

             A   B   C   D
2020-12-14   0   1   2   3
2020-12-15   4   5   6   7
2020-12-16   8   9  10  11
2020-12-17  12  13  14  15
2020-12-18  16  17  18  19
               B           C      
             sum  mean   sum  mean
2020-12-14   1.0   1.0   2.0   2.0
2020-12-15   6.0   3.0   8.0   4.0
2020-12-16  15.0   5.0  18.0   6.0
2020-12-17  27.0   9.0  30.0  10.0
2020-12-18  39.0  13.0  42.0  14.0
6) 对不同列应用不同函数
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(5,4),index = pd.date_range('12/14/2020', periods=5),columns = ['A', 'B', 'C', 'D'])
print (df)
#窗口大小为3,min_periods 最小观测值为1
r = df.rolling(window=3,min_periods=1)
print(r.aggregate({"B":np.sum,"C":np.mean}))

输出结果:

             A   B   C   D
2020-12-14   0   1   2   3
2020-12-15   4   5   6   7
2020-12-16   8   9  10  11
2020-12-17  12  13  14  15
2020-12-18  16  17  18  19
               B     C
2020-12-14   1.0   2.0
2020-12-15   6.0   4.0
2020-12-16  15.0   6.0
2020-12-17  27.0  10.0
2020-12-18  39.0  14.0
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值