频率和百分比数据帧.groupby带s

2024-05-15 17:10:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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对输出进行排序?你知道吗


Tags: 数据字符串pandasrateval标签特性label
1条回答
网友
1楼 · 发布于 2024-05-15 17:10:07

用途:

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列,可以使用syntactig sugar-groupbyby boolean maskwith Seriesgrs_df_main['Tenure']和aggregate mean

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函数:

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

相关问题 更多 >