Python基础 | pandas基础统计
目录
本文示例数据下载,密码:vwy3
import pandas as pd
import numpy as np
# 数据是之前在cnblog上抓取的部分文章信息
df = pd.read_csv('./data/SQL测试用数据_20200325.csv',encoding='utf-8')
df.head(3)
单列统计#
单列单统计指标#
# 计数(不去重),不会将NaN值计算在内
df['read_cnt'].count()
# 比如我们来做个试验
# 选择几个单元格,之前都是有数值的
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]
# 计数(去重),不会将NaN值计算在内
# 使用nunique()方法
df['blog_name'].nunique()
常见统计指标
- 求和
.sum()
- 最大值
.min()
- 最小值
.min()
- 均值
.mean()
- 中位数
.median()
- 方差
.var()
- 标准差
.std()
- 偏度
.skew()
- 峰度
.kurtosis()
- 百分位数
.quantile()
, df.quantile(0.5)相当于中位数
单列多统计指标#
# 求和,计数,均值
df['read_cnt'].aggregate(func=['sum','count','mean'])
多列统计#
多列相同统计指标#
# 去重计数,相当于sql中的count(distinct)
df.nunique()
df.describe() # 只对数值列有效
# 选定多列同时计算多个相同的指标
df[['href','blog_name']].aggregate(func=['nunique','count'])
多列不同统计指标#
# 对blog_name字段去重计数
# 对read_cnt计算求和、均值
df[['blog_name','read_cnt']].aggregate(func={'blog_name':'nunique','read_cnt':['sum','mean']})
分组统计#
df.groupby#
单字段单指标
这里的单字段是指统计用的value列
df.groupby('weekday')['read_cnt'].nunique()
单字段多指标
df.groupby('weekday')['read_cnt'].aggregate(func=['sum','mean']).reset_index()
# 多个分组字段
df.groupby(['weekday','hour'])['read_cnt'].aggregate(func=['sum','mean']).reset_index()
多字段相同指标
# 除了分组字段外,其他字段都参与计算
df.groupby('weekday').count().reset_index()
# 指定多个字段
# 注意多个字段要以list的格式包裹
df.groupby('weekday')[['blog_name','date']].nunique().reset_index()
# 多字段统一计算相同指标
df.groupby('weekday').aggregate(func=['nunique','count']).reset_index()
多字段不同指标
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保持一致
单字段单指标
# index和columns可以不用同时设置值
# 对比一下两者的差异
# index是将分组的字段放到统计表格的左侧
pd.pivot_table(df, values='read_cnt'\
,index='weekday'\
,aggfunc='sum').reset_index()
# columns是将制定的分组字段放到统计table的正上方
pd.pivot_table(df, values='read_cnt'\
,columns='weekday'\
,aggfunc='sum').reset_index()
# index和columns同时设定的效果
pd.pivot_table(df, values='read_cnt'\
,index='hour'\
,columns='weekday'\
,aggfunc='sum').reset_index()
为了便于演示计算字段(values)和统计指标(aggfunc)的操作,后续只使用index字段分组
单字段多指标
pd.pivot_table(df, values='read_cnt'\
,index='weekday'\
,aggfunc=['sum','mean']).reset_index()
多字段相同指标
# 对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())
多字段不同指标
pd.pivot_table(df, values=['blog_name','read_cnt']\
,index='weekday'\
,aggfunc={'blog_name':lambda x: x.nunique(),'read_cnt':['sum','mean']}).reset_index()
其他补充
# 实现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)
作者: dataxon
出处:https://www.cnblogs.com/dataxon/p/12634911.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
转载请注明作者及出处,公众号【dataxon】同步发文
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园2025新款「AI繁忙」系列T恤上架,前往周边小店选购
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 日常问题排查-空闲一段时间再请求就超时
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 领域驱动的事实与谬误 一 DDD 与 MVC
· SQL Server 2025 中的改进
· 当数据爆炸遇上SQL Server:优化策略全链路解析
· Excel百万数据高性能导出方案!
· 揭秘 AI 工具的系统提示词「GitHub 热点速览」
· DeepWiki:AI驱动、免费且实用的 GitHub 源码阅读与分析神器!
· 日常问题排查-空闲一段时间再请求就超时
· 上周热点回顾(4.28-5.4)