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

Pandas 从按唯一ID分组的多个类别中聚合(计算)特定类别的比率,pandas,python-3.6,calculation,Pandas,Python 3.6,Calculation,作为我上一个问题的后续行动, 感谢@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的比率 你可以用 df.groupby('Cust_ID')['STATUS'].apply(lambda x: (x == 1).mean()) 输出: Cust_ID

作为我上一个问题的后续行动, 感谢@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的比率 你可以用

 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
你可以用

 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
使用eq==为一列数据帧创建的布尔掩码的平均值:

对于2列df:

使用eq==为一列数据帧创建的布尔掩码的平均值:

对于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