从按唯一 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
作为我之前问题的后续,
我的另一列有 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