本文示例数据下载,密码:vwy3html
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()
常见统计指标python
.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']})
这里的单字段是指统计用的value列ide
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()
pd.pivot_table主要参数说明:函数
['col_1','col_2']
)False
,是否要对行和列汇总,只有设定了index参数才有效NaN
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字段分组ui
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()
其余补充code
# 实现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)