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

时间:2018-08-01 11:46:49

标签: python pandas dataframe aggregate

我有一个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排序此输出?

1 个答案:

答案 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 列,则可以使用句法糖-rategroupby boolean mask使用Series并汇总grs_df_main['Tenure']

mean

对于所有列,请将aggchurn_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