按订阅类型分组计算取消标记占比及生成可视化友好格式的方法咨询
按订阅类型分组计算取消标记占比及生成可视化友好格式的方法咨询
嘿,这个需求我经常碰到,给你一套完整的解决方案,从计算占比到适配可视化一步到位!
首先,先给你复现下你的示例DataFrame(方便你直接跑代码验证,如果你已经有现成的DataFrame可以跳过这步):
import pandas as pd # 构造示例数据 data = { 'Account ID': [123, 222, 234, 345], 'Subscription type': ['Basic', 'Basic', 'Hybrid', 'Hybrid'], 'Cancellation flag': [1, 0, 1, 1] } df = pd.DataFrame(data)
接下来是核心的分组计算部分,这里有个实用小技巧:因为你的Cancellation flag是0和1的数值类型,直接对分组后的列取均值,就能得到1的占比(也就是取消用户的比例),乘以100转成百分比更直观;最后用reset_index()把分组索引转成普通列,得到的格式完美适配柱状图的需求:
# 按订阅类型分组计算取消占比,生成可视化友好的格式 cancellation_rates = df.groupby('Subscription type')['Cancellation flag'].agg( cancellation_rate=lambda x: x.mean() * 100 ).reset_index()
运行完这段代码后,你得到的cancellation_rates是这样的结构:
| Subscription type | cancellation_rate |
|---|---|
| Basic | 50.0 |
| Hybrid | 100.0 |
完全就是你要的——两列数据,一列是分组维度(订阅类型),一列是对应取消占比,直接就能拿来画柱状图。
最后给你补个画柱状图的示例(用matplotlib,简单直接):
import matplotlib.pyplot as plt # 生成柱状图 plt.bar(cancellation_rates['Subscription type'], cancellation_rates['cancellation_rate']) # 加上标签和标题让图更清晰 plt.xlabel('Subscription Type') plt.ylabel('Cancellation Rate (%)') plt.title('Cancellation Rate by Subscription Type') # 显示图形 plt.show()
如果你想要更美观的图,也可以用seaborn,代码逻辑差不多:
import seaborn as sns sns.barplot(data=cancellation_rates, x='Subscription type', y='cancellation_rate') plt.xlabel('Subscription Type') plt.ylabel('Cancellation Rate (%)') plt.title('Cancellation Rate by Subscription Type') plt.show()
这样一套流程下来,从计算占比到生成可视化的步骤都覆盖到了,完全不用额外调整格式就能得到想要的结果~
备注:内容来源于stack exchange,提问作者EvitaSchaap
相关产品推荐
相关产品推荐

