gpt4 book ai didi

python - dataframe.groupby 中排序的频率和百分比

转载 作者:行者123 更新时间:2023-12-01 09:11:18 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框,其中对我来说有趣的功能称为 Tenure (预测变量之一)和一个名为 Churn 的列(标签,字符串 ' 0' 和 '1')。

col1    col2    ... Tenure  ... Churn
val_1 ... 5 0
val_i ... ... label_i
val_n ... 36 1

现在我想生成一个具有这些值的数据框:

Tenure  Churned Churn_Rate
5 51 15.31
... ... ...
36 16 21.98

数据按 Tenure 分组,Churned 是值“1”的频率,Churn_Rate 是此类出现的百分比对于每个 Tenure 值。

到目前为止,这就是我所做的,但我得到的是一个元组。

churn_per_tenure = grs_df_main.groupby(['Tenure']).apply(lambda x: ((x['Churn'] == '1').sum(), x['Churn'].count()))

此外,如何按以下方式对输出进行排序:TenureChurnedChurn_Rate

最佳答案

用途:

grs_df_main = pd.DataFrame({'Tenure':[1,1,1,2,2,2,3],
'Churn': ['0','1','1','1','0','0','0']})

print(grs_df_main)
Tenure Churn
0 1 0
1 1 1
2 1 1
3 2 1
4 2 0
5 2 0
6 3 0

如果只需要rate列,您可以使用语法糖 - groupby by boolean mask with Series grs_df_main['Tenure'] 和聚合平均值:

churn_per_tenure = ((grs_df_main['Churn'] == '1').groupby(grs_df_main['Tenure'])
.mean()
.reset_index(name='Churn_Rate'))
print (churn_per_tenure)
Tenure Churn_Rate
0 1 0.666667
1 2 0.333333
2 3 0.000000

对于所有列,请使用 agg使用 lambda 函数:

f = lambda x: (x == '1').sum()
f.__name__ = 'Churned'
churn_per_tenure = grs_df_main.groupby(['Tenure'])['Churn'].agg([f, 'count']).reset_index()
churn_per_tenure['Churn_Rate'] = churn_per_tenure['Churned'] / churn_per_tenure.pop('count')
print (churn_per_tenure)
Tenure Churned Churn_Rate
0 1 2 0.666667
1 2 1 0.333333
2 3 0 0.000000

如果还想count列删除pop功能:

churn_per_tenure['Churn_Rate'] = churn_per_tenure['Churned'] / churn_per_tenure['count']
print (churn_per_tenure)
Tenure Churned count Churn_Rate
0 1 2 3 0.666667
1 2 1 3 0.333333
2 3 0 1 0.000000

关于python - dataframe.groupby 中排序的频率和百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51632491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com