最佳方式(运行-time)根据分组汇总(计算总和与总计数的比率)
Best way(run-time) to aggregate (calculate ratio of) sum to total count based on group by
我正在尝试确定已批准申请(由标志“1”标识,如果不是则为“0”)与每个人的申请总数 (Cust_ID) 的比率。我已经通过以下代码实现了这个逻辑,但是计算 160 万条记录需要大约 10 分钟。有没有更快的执行同样的操作?
# Finding ratio of approved out of total applications
df_approved_ratio = df.groupby('Cust_ID').apply(lambda x:x['STATUS_Approved'].sum()/len(x))
我认为需要汇总 mean
:
df = pd.DataFrame({'STATUS_Approved':[0,1,0,0,1,1],
'Cust_ID':list('aaabbb')})
print (df)
STATUS_Approved Cust_ID
0 0 a
1 1 a
2 0 a
3 0 b
4 1 b
5 1 b
df_approved_ratio = df.groupby('Cust_ID')['STATUS_Approved'].mean()
print (df_approved_ratio)
Cust_ID
a 0.333333
b 0.666667
Name: STATUS_Approved, dtype: float64
print (df.groupby('Cust_ID').apply(lambda x:x['STATUS_Approved'].sum()/len(x)))
Cust_ID
a 0.333333
b 0.666667
Name: STATUS_Approved, dtype: float64
我正在尝试确定已批准申请(由标志“1”标识,如果不是则为“0”)与每个人的申请总数 (Cust_ID) 的比率。我已经通过以下代码实现了这个逻辑,但是计算 160 万条记录需要大约 10 分钟。有没有更快的执行同样的操作?
# Finding ratio of approved out of total applications
df_approved_ratio = df.groupby('Cust_ID').apply(lambda x:x['STATUS_Approved'].sum()/len(x))
我认为需要汇总 mean
:
df = pd.DataFrame({'STATUS_Approved':[0,1,0,0,1,1],
'Cust_ID':list('aaabbb')})
print (df)
STATUS_Approved Cust_ID
0 0 a
1 1 a
2 0 a
3 0 b
4 1 b
5 1 b
df_approved_ratio = df.groupby('Cust_ID')['STATUS_Approved'].mean()
print (df_approved_ratio)
Cust_ID
a 0.333333
b 0.666667
Name: STATUS_Approved, dtype: float64
print (df.groupby('Cust_ID').apply(lambda x:x['STATUS_Approved'].sum()/len(x)))
Cust_ID
a 0.333333
b 0.666667
Name: STATUS_Approved, dtype: float64