从按唯一 ID 分组的多个类别中聚合(计算比率)特定类别

Aggregate (calculate the ratio of) a particular category from multiple categories grouped by unique IDs

作为我之前问题的后续, (感谢@jezrael)

我的另一列有 4 种不同的状态 - 比如 1,2,3,4

我现在正在尝试找出每个 ID 的 1 的比率。

df = pd.DataFrame({'STATUS':[1,2,1,3,4,1,2,3,1,1],'Cust_ID':list('aaabbbccdd')})

期望的输出:

求每个ID的1的比例

Cust_ID 
a    0.66667
b    0.33333
c    0.00000
d    1.00000

您可以使用

 df.groupby('Cust_ID')['STATUS'].apply(lambda x: (x == 1).mean())

输出:

Cust_ID
a    0.666667
b    0.333333
c    0.000000
d    1.000000
Name: STATUS, dtype: float64

对一列 DataFrame:

使用 eq (==) 创建的布尔掩码的 mean
df1 = df['STATUS'].eq(1).groupby(df['Cust_ID']).mean().to_frame()
#alternative
#df1 = (df['STATUS'] == 1).groupby(df['Cust_ID']).mean().to_frame()
print (df1)
           STATUS
Cust_ID          
a        0.666667
b        0.333333
c        0.000000
d        1.000000

2 列的 df:

df1 = df['STATUS'].eq(1).groupby(df['Cust_ID']).mean().reset_index()
#alternative
#df1 = (df['STATUS'] == 1).groupby(df['Cust_ID']).mean().reset_index()
print (df1)
  Cust_ID    STATUS
0       a  0.666667
1       b  0.333333
2       c  0.000000
3       d  1.000000