【问题标题】:Hierarchical Operation Pandas分级操作 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

【问题讨论】:

    标签: python pandas pandas-groupby multi-index


    【解决方案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 函数检查您的第二个示例,这就是在这种情况下的工作 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2022-12-22
    • 2021-11-07
    • 2013-05-17
    相关资源
    最近更新 更多