You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python DataFrame按acat分组统计data频次并计算均值与偏度

解决方法:按acat分组统计频次并计算均值与偏度

针对你需要按每个唯一acat值,统计data在1-5类别中的出现次数(即bins),再计算bins的均值和偏度的需求,我可以用Pandas结合Scipy来实现,下面用你的示例数据一步步演示:

1. 导入依赖库并准备示例数据

首先导入需要的工具库,然后定义你的示例DataFrame:

import pandas as pd
from scipy.stats import skew

# 示例数据
df = pd.DataFrame({'acat':[1,1,2,3,1,3], 'data':[1,1,2,1,3,1]})

2. 分组统计每个acat的data类别频次

我们需要确保1-5每个类别都被统计到(哪怕出现次数为0),可以通过分组后的值计数、转置填充缺失值,再重排类别顺序来实现:

# 按acat分组统计data各值的出现次数,转置后填充缺失类别为0,并重排为1-5的顺序
counts_df = df.groupby('acat')['data'].value_counts()\
              .unstack(fill_value=0)\
              .reindex(columns=[1,2,3,4,5], fill_value=0)

这一步执行后,counts_df就是每个acat对应的bins矩阵:

1  2  3  4  5
acat
1     2  0  1  0  0
2     0  1  0  0  0
3     2  0  0  0  0

3. 计算bins的均值与偏度

接下来对每个acat的bins计算均值和偏度:

# 计算均值:bins的总和除以类别数量(5)
counts_df['mean'] = counts_df.sum(axis=1) / 5

# 计算偏度:对每行的1-5列(即bins)应用偏度计算函数
counts_df['skewness'] = counts_df[[1,2,3,4,5]].apply(skew, axis=1)

最终结果

执行完上述代码后,counts_df会包含每个acat的bins、均值和偏度:

1  2  3  4  5  mean  skewness
acat
1     2  0  1  0  0   0.6  0.577350
2     0  1  0  0  0   0.2  0.000000
3     2  0  0  0  0   0.4  1.732051

关键步骤解释

  • groupby('acat')['data'].value_counts():按acat分组,统计每个分组内data各值的出现次数。
  • unstack(fill_value=0):将行形式的统计结果转为列形式,缺失的data类别(比如某个acat没有出现4、5)填充为0。
  • reindex(columns=[1,2,3,4,5]):强制列顺序为1到5,避免因某些分组缺失类别导致列顺序混乱。
  • skew函数:来自scipy.stats,用于计算一组数据的偏度,衡量数据分布的不对称程度。

内容的提问来源于stack exchange,提问作者ladidalimey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:40:21