分级操作 Pandas

Posted

技术标签:

【中文标题】分级操作 Pandas【英文标题】:Hierarchical Operation Pandas 【发布时间】:2021-10-31 16:27:20 【问题描述】:

显然我错过了一些简单的东西,但我不知道是什么。我想按组传播操作。让我们说一些简单的事情,我有一个带有多索引的简单系列(比如说 2 个级别),我想取平均值并将该平均值减去正确的索引级别。

极简示例代码:

a = pd.Series((2,1): 3., (1,2):4.,(2,3):4.)
b = a.groupby(level=0).mean()
r = a-b # this is the wrong line, b doesn't propagate to the multiindex of a

我期望的结果:

2  1    -0.5
1  2    0
2  3    .5
dtype: float64

【问题讨论】:

【参考方案1】:

使用Series.sub 和可能定义的对齐级别:

r = a.sub(b, level=0)
print (r)
2  1   -0.5
1  2    0.0
2  3    0.5
dtype: float64

或将GroupBy.transform 用于Series,其索引与原始a Series 相同:

b = a.groupby(level=0).transform('mean')
r = a-b
print (r)
2  1   -0.5
1  2    0.0
2  3    0.5
dtype: float64

【讨论】:

顺便@jezrael,我可能需要发布另一个问题,但假设b 的结果也是多级的(例如,如果a 有3 个级别,b 有2 个级别因为b= a.groupby(level=[0,1]).mean()),这似乎不再起作用了。如果我不够清楚,我要么更新我的问题,要么发布一个新问题。但我期待的是像r = a.sub(b, level=[0,1]) 这样似乎不起作用的东西。我得到TypeError: Join on level between two MultiIndex objects is ambiguous 好的,没有使用 transform 函数检查您的第二个示例,这就是在这种情况下的工作 =)

以上是关于分级操作 Pandas的主要内容,如果未能解决你的问题,请参考以下文章

DPDK QoS 框架 - 3. 分级调度模块的实现

kubernetes dashboard 认证及分级授权

EOS账户系统账户权限分级

C零基础视频-32-指针铺垫知识:计算机分级结构

数据分析之Pandas合并操作总结

Pandas的拼接操作