python - 基于另一列对数据框进行分组/汇总和求和
问题描述
我有一个df
从 numpy 数组创建的数据框 (),如下所示:
0.22 1
0.31 1
0.91 1
0.48 2
0.2 2
0.09 2
0.9 3
0.71 3
0.73 3
0.65 4
0.16 4
0.9 4
0.75 5
0.87 5
0.72 5
0.68 6
0.54 6
0.48 6
我想创建一个汇总数据框,将第一列中的值相对于其在第二列中的位置相加。因此,我希望从上面的示例中输出的摘要数据帧如下所示:
3.68 total
2.79 total
3.83 total
其中:摘要数据框中的第一个值将等于:0.22+0.48+0.9+0.65+0.75+0.68=3.68
摘要数据框中的第二个值将等于:0.31+0.2+0.71+0.16+0.87+0.54=2.79
摘要数据框中的第三个值将等于:
0.91+0.09+0.73+0.9+0.72+0.48=3.83
解决方案
您可以进行两次 groupby,一次用于标记每个组内的相对位置,一次用于求和:
df[0].groupby(df.groupby(df[1]).cumcount()).sum()
输出:
0 3.68
1 2.79
2 3.83
Name: 0, dtype: float64
选项 2:如果所有组的元素数量相等,我们可以重塑:
df[0].values.reshape(df[1].max(),-1).sum(0)
# out
# array([3.68, 2.79, 3.83])
推荐阅读
- networking - 两台服务器之间 SSH 文件传输的解决方案
- python-3.x - 列出目录下所有有效/可导入的 Python 文件
- javascript - 想要在使用 js 或 jquery 向下/向上滚动时隐藏/显示导航栏
- mysql - 如何删除重复单个列值的行
- java - 我在有意发送整数数据时遇到了一些麻烦。(安卓)
- android - 如何在 Android 的 GridView 中设置子文本框的大小
- mysql - 将一个表与其他 2 个表连接起来,这些表可能有也可能没有相关行
- matlab - 如何处理添加的额外元素以解决matlab中数组的尺寸不一致?
- node.js - 在 node.js & Bot 框架 V4.4 中调试脚本日志中间件
- ruby - 为什么 Kernel#require 在 Ruby 中引发 LoadError?