Python基础 | pandas基础统计

本文示例数据下载,密码:vwy3

Copy
import pandas as pd import numpy as np # 数据是之前在cnblog上抓取的部分文章信息 df = pd.read_csv('./data/SQL测试用数据_20200325.csv',encoding='utf-8') df.head(3)

单列统计#

单列单统计指标#

Copy
# 计数(不去重),不会将NaN值计算在内 df['read_cnt'].count()
Copy
# 比如我们来做个试验 # 选择几个单元格,之前都是有数值的 print(df.loc[2:4,'read_cnt']) # 然后将值设定为NaN df.loc[2:4,'read_cnt'] = None print(df.loc[2:4,'read_cnt']) # 看看count()结果 print(df['read_cnt'].count()) # 数据恢复原样 df.loc[2:4,'read_cnt'] = [142,158,132]
Copy
# 计数(去重),不会将NaN值计算在内 # 使用nunique()方法 df['blog_name'].nunique()

常见统计指标

  • 求和 .sum()
  • 最大值 .min()
  • 最小值 .min()
  • 均值 .mean()
  • 中位数 .median()
  • 方差 .var()
  • 标准差.std()
  • 偏度 .skew()
  • 峰度 .kurtosis()
  • 百分位数 .quantile(), df.quantile(0.5)相当于中位数

单列多统计指标#

Copy
# 求和,计数,均值 df['read_cnt'].aggregate(func=['sum','count','mean'])

多列统计#

多列相同统计指标#

Copy
# 去重计数,相当于sql中的count(distinct) df.nunique()
Copy
df.describe() # 只对数值列有效
Copy
# 选定多列同时计算多个相同的指标 df[['href','blog_name']].aggregate(func=['nunique','count'])

多列不同统计指标#

Copy
# 对blog_name字段去重计数 # 对read_cnt计算求和、均值 df[['blog_name','read_cnt']].aggregate(func={'blog_name':'nunique','read_cnt':['sum','mean']})

分组统计#

df.groupby#

pandas groupby官方介绍

单字段单指标

这里的单字段是指统计用的value列

Copy
df.groupby('weekday')['read_cnt'].nunique()

单字段多指标

Copy
df.groupby('weekday')['read_cnt'].aggregate(func=['sum','mean']).reset_index()
Copy
# 多个分组字段 df.groupby(['weekday','hour'])['read_cnt'].aggregate(func=['sum','mean']).reset_index()

多字段相同指标

Copy
# 除了分组字段外,其他字段都参与计算 df.groupby('weekday').count().reset_index()
Copy
# 指定多个字段 # 注意多个字段要以list的格式包裹 df.groupby('weekday')[['blog_name','date']].nunique().reset_index()
Copy
# 多字段统一计算相同指标 df.groupby('weekday').aggregate(func=['nunique','count']).reset_index()

多字段不同指标

Copy
df.groupby('weekday')[['blog_name','read_cnt']]\ .aggregate(func={'blog_name':'nunique','read_cnt':['median','mean']})\ .reset_index()

df.pivot_table#

pd.pivot_table主要参数说明:

  • data 参与计算的dataframe
  • values 需要进行统计计算的列,可以是单列或多列(e.g.['col_1','col_2'])
  • index 位于左侧的维度
  • columns 位于上方的维度
  • aggfunc 统计要用的函数,可以同时对多个字段计算多个统计值,也可以对每个字段设置不同的统计指标
    • aggfunc = ['sum','np.sum','mean','count']
    • aggfunc =
  • fill_value缺失值设定填充值
  • margins 默认False,是否要对行和列汇总,只有设定了index参数才有效
  • dropna=True,是否删除NaN
  • margins_name='All', 汇总的行或列的名称

df.pivot_table中的参数和pd.pivot_table保持一致

单字段单指标

Copy
# index和columns可以不用同时设置值 # 对比一下两者的差异 # index是将分组的字段放到统计表格的左侧 pd.pivot_table(df, values='read_cnt'\ ,index='weekday'\ ,aggfunc='sum').reset_index()
Copy
# columns是将制定的分组字段放到统计table的正上方 pd.pivot_table(df, values='read_cnt'\ ,columns='weekday'\ ,aggfunc='sum').reset_index()
Copy
# index和columns同时设定的效果 pd.pivot_table(df, values='read_cnt'\ ,index='hour'\ ,columns='weekday'\ ,aggfunc='sum').reset_index()

为了便于演示计算字段(values)和统计指标(aggfunc)的操作,后续只使用index字段分组

单字段多指标

Copy
pd.pivot_table(df, values='read_cnt'\ ,index='weekday'\ ,aggfunc=['sum','mean']).reset_index()

多字段相同指标

Copy
# 对blog_name,date两个字段去重计数 pd.pivot_table(df, values=['blog_name','date']\ ,index='weekday'\ ,aggfunc= lambda x :x.nunique()).reset_index() # 这里的lambda函数也可以定义为 lambda x:len(x.unique())

多字段不同指标

Copy
pd.pivot_table(df, values=['blog_name','read_cnt']\ ,index='weekday'\ ,aggfunc={'blog_name':lambda x: x.nunique(),'read_cnt':['sum','mean']}).reset_index()

其他补充

Copy
# 实现rollup的操作 df_stat = pd.pivot_table(df, values='read_cnt'\ ,index=['weekday'] ,columns='hour'\ ,aggfunc='sum',margins=True).unstack() pd.DataFrame(df_stat).head(30)
posted @   dataxon  阅读(926)  评论(0)    收藏  举报
编辑推荐:
· 日常问题排查-空闲一段时间再请求就超时
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 领域驱动的事实与谬误 一 DDD 与 MVC
· SQL Server 2025 中的改进
· 当数据爆炸遇上SQL Server:优化策略全链路解析
阅读排行:
· Excel百万数据高性能导出方案!
· 揭秘 AI 工具的系统提示词「GitHub 热点速览」
· DeepWiki:AI驱动、免费且实用的 GitHub 源码阅读与分析神器!
· 日常问题排查-空闲一段时间再请求就超时
· 上周热点回顾(4.28-5.4)
点击右上角即可分享
微信分享提示
CONTENTS