python - Pandas:索引和列中的分组名称
问题描述
我有一个对索引和列都使用 MultiIndex 的数据框。例如:
df = pd.DataFrame(index=pd.MultiIndex.from_product([[1,2], [1,2,3], [4,5]], names=['i','j', 'k']), columns=pd.MultiIndex.from_product([[1,2], [1,2]], names=['x', 'y']))
for c in df.columns:
df[c] = np.random.randint(100, size=(12,1))
x 1 2
y 1 2 1 2
i j k
1 1 4 10 13 0 76
5 92 37 52 40
2 4 88 77 50 22
5 75 31 19 1
3 4 61 23 5 47
5 43 68 10 21
2 1 4 23 15 17 5
5 47 68 6 94
2 4 0 12 24 54
5 83 27 46 19
3 4 7 22 5 15
5 7 10 89 79
我想按索引中的名称和列中的名称对值进行分组。对于每个这样的组,我们将有一个二维数字数组(而不是一个系列)。我想聚合std()
该二维数组中的所有条目。
例如,假设我 groupby ['i', 'x']
,一组将具有i=1
and的值x=1
。我想为std
这些 2D 数组中的每一个进行计算,并生成一个DataFrame
值i
作为索引,x
值作为列的值。
实现这一目标的最佳方法是什么?
如果我确实stack()
要x
作为索引,我仍然会计算几个std()
而不是一个,因为仍然会有多个列。
解决方案
您可以使用stack
将列的“y”级别作为索引,然后groupby
只有 i 才能获得:
print (df.stack(level='y').groupby(['i']).std())
x 1 2
i
1 32.966811 23.933462
2 28.668825 28.541835
推荐阅读
- sql - 如何加快这个 PostgreSQL UPDATE FROM sql 查询的速度?目前完成运行需要几天时间
- c# - 如何 Debug.log 或打印到屏幕?
- python - 有没有办法从 Django 中的另一个视图调用帖子?
- javascript - Javascript 不等待 Promise 在函数中解析
- encryption - 解码 Tp-Link Tapo c200 IoT IP 摄像机的 Discovery udp 数据包有效负载的二进制部分
- sql - Access Query 和 VBA SQL 为“Having”返回不同的数据
- r - 探索澳大利亚人口普查数据的最佳方式?
- c++ - 限制类成员指针的限定符
- javascript - 勾选订单号
- c++ - gradle 使用什么版本的 c++?是不是已经安装的版本?