python - Pandas GroupBy计算满足一定条件的加权百分比

标签 python pandas group-by

我有一个包含调查数据的数据框,每一行都是不同的受访者。

weight    race      Question_1      Question_2      Question_3
   0.9   white               1               5               4
   1.1   asian               5               4               3
  0.95   white               2               1               5
  1.25   black               5               4               3
  0.80   other               4               5               2

每个问题都是从 1 到 5 的等级(实际数据中还有几个问题)。对于每个问题,我都试图计算回答为 5 的受访者百分比,按种族分组并按权重列加权。

我相信下面的代码可以计算每个问题的回答为 5 的百分比,按种族分组。但我不知道如何通过权重列对其进行加权。

df.groupby('race').apply(lambda x: ((x == 5).sum()) / x.count())

我是 Pandas 的新手。有人可以解释一下如何做到这一点吗?谢谢你的帮助。

编辑:上述数据框的所需输出看起来像这样。显然,真实数据有更多的受访者(行)和更多的问题。

        Question_1      Question_2      Question_3
white         0.00            0.49            0.51
black         1.00            0.00            0.00
asian         1.00            0.00            0.00
other         0.00            1.00            0.00   

谢谢。

最佳答案

这是一个通过定义自定义函数并将该函数应用于每一列的解决方案。然后您可以将每一列连接成一个数据框:

def wavg(x, col):
    return (x['weight']*(x[col]==5)).sum()/x['weight'].sum()

grouped = df.groupby('race')
pd.concat([grouped.apply(wavg,col) for col in df.columns if col.startswith('Question')],axis=1)\
    .rename(columns = {num:f'Question_{num+1}' for num in range(3)})

输出:

        Question_1  Question_2  Question_3
race            
asian   1.0         0.000000    0.000000
black   1.0         0.000000    0.000000
other   0.0         1.000000    0.000000
white   0.0         0.486486    0.513514

关于python - Pandas GroupBy计算满足一定条件的加权百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54298464/

相关文章:

python - 如何删除 3D numpy 数组中的特定元素

python - 知道为什么在 Python 中创建新的 MongoClient 对象后我会得到 "name ' sys' is not defined”吗?

python - Pandas DF,不等列中的条件选择

mysql - SUM(IF(COND,EXPR,NULL)) 和 IF(COND, SUM(EXPR),NULL)

mysql - 在 mysql 的 WHERE 子句中使用子查询

python - 将值从字典添加到新列,其键与数据帧的索引匹配

python - 通过 groupby 连接 pandas Dataframe

python - 从堆叠数据帧中创建枢轴多索引数据帧的最聪明方法

sql - COALESCE 类型 jsonb 和 boolean 无法匹配

python - 在 DetailView 中显示多个对象