python - 对于特定类别,计算每行高于或低于平均值的百分比

标签 python pandas

我想知道如何通过 Python 计算每个类别的每一行是高于还是低于平均水平?我有一个名为 test.csv 的 csv 文件。比如类别2,我有两个值。首先,我需要计算该类别的平均值,然后计算每个值是高于还是低于平均百分比。我不知道如何做后者。

import pandas as pd
import numpy as np

#loading the data into data frame
X = pd.read_csv('test.csv')

感兴趣的两列是 CategoryTotals 列:

Category Totals estimates
2        2777   043
4        1003   06
4        3473   065
4        2638   017
1        2855   04
0        2196   03
0        2630   91
2        2714   39
3        2472   0.51
0        1090   0.12

最佳答案

使用groupby.transform计算分组均值:

means = df.groupby('Category')['Totals'].transform('mean')

然后使用np.select检查它们是否高于/低于/等于分组均值:

conditions = {
    'above': df['Totals'] > means,
    'below': df['Totals'] < means,
}

df['vs_mean'] = np.select(conditions.values(), conditions.keys(), default='equal')

#    Category  Totals  estimates vs_mean
# 0         2    2777      43.00   above
# 1         4    1003       6.00   below
# 2         4    3473      65.00   above
# 3         4    2638      17.00   above
# 4         1    2855       4.00   equal
# 5         0    2196       3.00   above
# 6         0    2630      91.00   above
# 7         2    2714      39.00   below
# 8         3    2472       0.51   equal
# 9         0    1090       0.12   below

关于python - 对于特定类别,计算每行高于或低于平均值的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69147780/

相关文章:

python - 将 Spark SQL 数据帧转换为 Pandas 数据帧

python - 在 Python Pandas 中格式化字符串数字

python - 如何使 pygame 沿 2 点之间的直线上的所有点绘制?

Python 如果存在重复项,如何指定要索引的字符

python - BeautifulSoup XML 仅打印第一行

python - pandas 读取未分隔的文本文件到数据框

python - python可以访问本地存储在 keystore (如seahorse/Apple Keychain)中的RSA私钥吗

python - 在运行时更改蓝图或重新加载 flask 应用程序

python - 迭代 Pandas 系列

python - 如何获取值在 pandas 的任何过滤列中至少匹配一次的行