You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何转换DataFrame计算分类占比以绘制100%堆叠柱状图

实现方案
  • 先预处理日期格式和无效数据,确保按天统计的维度统一
  • 按日期、Flair分组统计单类发帖数量
  • 结合每日总发帖量计算各Flair占比,单日所有分类占比总和为100%
  • 透视转换为行是日期、列是Flair、值为占比的目标宽表
import pandas as pd

# 1. 数据预处理
# 将提交日期转为纯日期格式,去掉时分秒,确保按天统计维度统一
# 若原字段已经是datetime类型可直接取dt.date,format参数按你实际数据的日期格式调整
df['Submission_Date'] = pd.to_datetime(df['Submission_Date'], format='%Y-%m-%d %H:%M:%S').dt.date
# 过滤掉Flair为空的无效发帖数据
df = df.dropna(subset=['Flair'])

# 2. 按日期+Flair分组统计发帖数
daily_flair_cnt = df.groupby(['Submission_Date', 'Flair'])['Post ID'].count().reset_index(name='post_count')

# 3. 计算单日各Flair占比
# 先计算每日总发帖量,transform会自动对齐分组维度
daily_total_cnt = daily_flair_cnt.groupby('Submission_Date')['post_count'].transform('sum')
# 占比保留2位小数,可根据需求调整精度
daily_flair_cnt['ratio'] = (daily_flair_cnt['post_count'] / daily_total_cnt * 100).round(2)

# 4. 透视生成目标格式DataFrame
result_df = daily_flair_cnt.pivot(
    index='Submission_Date',
    columns='Flair',
    values='ratio'
).fillna(0).reset_index() # 当日无对应Flair发帖的话占比填0
结果验证

你可以随机抽取result_df中任意一行的数值求和,总和会在100%附近,误差来自小数位保留逻辑,该结果可直接用于绘制多日期多分类100%堆叠柱状图。

内容的提问来源于stack exchange,提问作者reCaptcha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:09:03