使用条件 groupby 计算分类列的百分比并在 Python 中计数

Posted

技术标签:

【中文标题】使用条件 groupby 计算分类列的百分比并在 Python 中计数【英文标题】:Calculate percentage of categorical column using conditional groupby and count in Python 【发布时间】:2020-12-03 06:44:27 【问题描述】:

我想为每个 id 计算来自 id 的所有行的 True 值的百分比。

这是我的数据示例:

id     col1    
 1     True
 1     True
 1     False
 1     True
 2     False
 2     False

新列应如下所示:

id     col1    num_true
 1     True     0.75
 1     True     0.75
 1     False    0.75
 1     True     0.75
 2     False    0
 2     False    0

这是我尝试做的:

df['num_true']= df[df['col1'] == 'True'].groupby('id')['col1'].count()
df['num_col1_id']= df.groupby('id')['col1'].transform('count')

df['perc_true']= df.num_true/df.num_col1_id

【问题讨论】:

【参考方案1】:

groupby 并申请transform 以获取mean

df['num_true']=df.groupby('id').col1.transform('mean')



  id   col1  num_true
0   1   True      0.75
1   1   True      0.75
2   1  False      0.75
3   1   True      0.75
4   2  False      0.00
5   2  False      0.00

【讨论】:

【参考方案2】:

这里是询问的代码:

import pandas as pd
df = pd.DataFrame("col1": [True,True,False,True,False,False], index = [1,1,1,1,2,2])
grouped_df = df.groupby(df.index)
df["num_true"] = grouped_df.sum() / grouped_df.count()

我在这里所做的是按索引对数据框进行分组, 之后,我将“真”值的数量相加,然后除以值的总数。

结果:

    col1    num_true
1   True    0.75
1   True    0.75
1   False   0.75
1   True    0.75
2   False   0.00
2   False   0.00

【讨论】:

以上是关于使用条件 groupby 计算分类列的百分比并在 Python 中计数的主要内容,如果未能解决你的问题,请参考以下文章

Groupby 一列并计算另一列的条件?

根据另一列计算 groupby 中的百分比

来自有条件和无条件列的 SQL 查询分组的比率或百分比

使用 GROUP BY 查询计算百分比

将列的名称保留在 groupby 中,并在 pandas 数据框中使用 sum

用于计算同一列的值百分比的 SQL [关闭]