分组与聚合
分组
pf.groupby(by=索引名称)
求以某一列分组后某一列的平均值
means = detail.groupby(by=索引名称)[行名称].mean()
agg方法 同时进行多个统计分析
detail[["counts","amounts"]].agg([np.sum,np.mean,np.min])
对于不同的数据求不同的统计分析
detail.agg({"counts":np.sum,"amounts":np.mean})
对某一列求多个统计分析
detail.agg({"amounts":[np.mean,np.sum],"counts":[np.max,np.min]})
apply方法 自定义自己的统计方法
detail['amounts'].apply(lambda x:x+1)
transform方法
detail.groupby(by='amounts').transform(np.sum)
透视表
比分组聚合更强大
按列
res = pd.pivot_table(data,values=["counts","amounts"],index="order_id") # 默认求平均值
按行
res = pd.pivot_table(data,values=["counts","amounts"],columns="dishes_name") # 默认求平均值
参数: fill_value 填充空值 aggfunc 求值函数 margins最后增加all dropna 是否删掉全为空的列
pd.pivot_table(data,values=["counts","amounts"],columns="dishes_name",index="order_id",aggfunc='max',fill_value=0,
margins=True) # 默认求平均值
交叉表
pd.crosstab(index=detail['order_id'],values=detail['amounts'],aggfunc=max,columns=detail['dishes_name'])
参数 : index 行 columns 列 values 值 aggfunc 数据分析函数
可以将values去掉 统计的是分组交叉频率
res = pd.crosstab(index=detail['order_id'],columns=detail['dishes_name'])
去重
单列数据去重
data = detail["counts"].drop_duplicates() # 对原数据没有修改 只是展示
多列数据去重 inplace 对原数据改变
data = detail.drop_duplicates(subset=["counts","amounts"],inplace=True)