本文示例數據下載,密碼: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)