python - 计算python中列中值的百分比贡献
问题描述
我有以下数据框
item1 item2 item3
x y z
x1 y1 z1
x y2 z2
x y z1
x2 y z
x2 y1 z2
我想找到列中每个值对列中所有值的百分比贡献(第 1 项中 x、x1、x2 的贡献与第 2 项和第 3 项相同)
以下必须是结果数据框。
item1 %con_item1 item2 %con_item2 item3 %con_item3
x 50 y 50 z 33.33
x1 16.66 y1 33.33 z1 33.33
x2 33.33 y2 16.66 z2 33.33
解决方案
value_counts
与normalize
设置为 True 的参数一起使用:
pd.concat([df[i].value_counts(normalize=True).reset_index() for i in df.columns], axis=1)
输出:
index item1 index item2 index item3
0 x 0.500000 y 0.500000 z1 0.333333
1 x2 0.333333 y1 0.333333 z2 0.333333
2 x1 0.166667 y2 0.166667 z 0.333333
使用缩放和列命名更新答案:
pd.concat([df[i].value_counts(normalize=True)
.mul(100.0)
.rename_axis(i)
.reset_index(name='%con_'+i) for i in df.columns], axis=1)
输出:
item1 %con_item1 item2 %con_item2 item3 %con_item3
0 x 50.000000 y 50.000000 z1 33.333333
1 x2 33.333333 y1 33.333333 z2 33.333333
2 x1 16.666667 y2 16.666667 z 33.333333
推荐阅读
- c - GtkRevealer 使文本视图绘图出现故障
- ios - StackView 内的 CollectionView
- javascript - 如何在 HTML 页面中动态填充值?
- javascript - 按“Enter”键实现新的换行
- google-app-engine - java.lang.RuntimeException:暂存包时出错
- mysql - “显示引擎 innodb 状态”中的过时死锁信息
- asp.net-mvc - 如何获取 AppSettings 作为常量值?
- javascript - Javascript - 未找到导入
- ruby - 如果在没有 shell 的情况下运行,Ruby 会以退出代码 1 响应 TERM 退出
- javascript - VSCode - 保存时 JavaScript 文件的奇怪语法格式