python - 计算多列的百分比

标签 python pandas dataframe pandas-groupby

我有一个具有以下结构的数据集

<表类=“s-表”> <标题> 索引 候选人 页面名称 帖子创建日期 总互动 喜欢 分享 评论 爱 生气 <正文> 0 安东尼奥·科斯塔 观察员 2022-01-03 4500 340 400 433 545 565

有 9 个不同的 candidato (候选人)和27个不同的Page Name

可以找到完整数据集here

我需要找到一种方法来计算每个Page NameTotal Interactions 的总数和百分比 , Likes , Shares , Comments , Love ,和Angry 这将产生具有以下结构的 DataFrame

<表类=“s-表”> <标题> 候选人 页面名称 总互动 总互动百分比 总喜欢 总点赞百分比 其他列 其他列百分比 <正文> 安东尼奥·科斯塔 观察员 6500 34 23 1% 540 23% 瑞里奥 观察员 4500 23 值 百分比 值 百分比

我需要计算这个的原因是为了生成一个百分比堆叠条形图,如下图所示: Percent Stacked Bar Chart

使用 Pandas 实现这一目标的最佳方法是什么?提前感谢您的帮助。

披露此问题旨在帮助一个非营利项目分析媒体对 2022 年大选葡萄牙候选人的行为和偏见。 prior report是使用 Google Sheets 制作的,但使用 Python 分析数据集是最好的方法,因为我计划每 3 个月执行一次。

可以找到 GitHub 存储库 here ,您可以在其中访问所有使用的数据集和代码。

最佳答案

您可以groupby“页面名称”和“候选人”,然后找到“总互动数”、“喜欢”、“评论”、“分享”、“爱”、“的总和”对每个页面名称和每个候选人感到愤怒:总计

然后按第一个索引级别(即“页面名称”)对 totals 使用 groupby 并转换 sum 函数,以便获得每个转换后的页面名称的总和求 totals 并将 totals 除以它即可得出百分比。

最后加入两个DataFrame以获得最终结果。

totals = df.groupby(['Page Name','candidato'])[['Total Interactions','Likes','Comments','Shares','Love','Angry']].sum()
percentages = totals.groupby(level=0).transform('sum').rdiv(totals).mul(100).round(2)

out = totals.join(percentages, lsuffix='', rsuffix='_Percentages').reset_index()

这会生成一个可以生成问题中的图的 DataFrame。

关于python - 计算多列的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71001130/

相关文章:

python - 修改 pandas 数据框中的行子集

python - 如何对 pandas DataFrame 中的连续值进行分组

python - Python Dataframe 子集的平均值

python - 重要的包和模块与 py2exe 不兼容?

python - 邻接表构造

Python3 + pytest + pytest 模拟 : Mocks leaking into other test functions breaking assertions?

python - 如何分组并一次加入多列的多行?

python - 随机采样 Github 存储库

python - 值错误: could not broadcast input array from shape (5) into shape (7)

python - 根据索引对 Pandas DataFrame 行进行分组