我有一个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()))
此外,我如何按Tenure
,Churned
或Churn_Rate
排序此输出?
答案 0 :(得分:1)
使用:
Algo
如果仅需要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
boolean mask
使用Series
并汇总grs_df_main['Tenure']
:>
mean
对于所有列,请将agg
与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
函数一起使用:
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