gpt4 book ai didi

pandas - 在 Pandas 中使用带有多索引的聚合

转载 作者:行者123 更新时间:2023-12-05 09:10:56 26 4
gpt4 key购买 nike

我在 pandas 中有一个按列划分的多索引表,如下例所示:

import pandas as pd
header = pd.MultiIndex.from_product([['loc1','loc2'],
['S1','S2']],
names=['loc','S'])
df = pd.DataFrame(np.random.randint(1, high=5, size=(5,4)),
index=['a','b','c','d','e'],
columns=header)
print(df)

输出:

loc loc1    loc2   
S S1 S2 S1 S2
a 4 2 2 5
b 1 4 2 4
c 2 4 2 3
d 3 4 1 2
e 4 1 3 1

我正在尝试对我使用的“loc1”和“loc2”执行操作

df.agg({'loc1':sum, 'loc2':np.mean})

但是我得到一个错误:“规范错误:不支持嵌套重命名器”。

预期的输出是包含 (loc1, S1) 和 (loc1, S2) 之和的一行,以及 (loc2, S1) 和 (loc2, S2) 的平均值,在我的例子中

  loc1    loc2  
sum mean
S1 S2 S1 S2
14 15 2 3

如何使用“agg”函数进行计算?有什么解决办法吗?

附注我知道我可以像答案 Pivot table with multiple aggfunc sum and normalize one column 那样做,但它似乎以某种方式“非 pythonic”。

最佳答案

不幸的是,对列 (axis=1) 上的 agg 的支持不如对行的支持那么完整。解决方案是在两次 agg 调用中完成。

创建聚合

o1 = df['loc1'].agg('sum').rename('sum').to_frame()
o2 = df['loc2'].agg('mean').rename('mean').to_frame()

合并聚合

result = pd.concat([o1,o2],axis=1, keys=['loc1', 'loc2'])

最后做一些争论以将数据转换为所需的格式

result = result.unstack().to_frame().T

结果

  loc1       loc2     
sum mean
S S1 S2 S1 S2
0 9.0 10.0 2.4 2.4

关于pandas - 在 Pandas 中使用带有多索引的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60604655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com