"无法从重复的轴重新索引"当multiIndex列上的groupby.apply()时

时间:2017-06-08 07:09:44

标签: python pandas multi-index pandas-groupby

我正在玩DataFrame中的计算小计,看起来像这样(注意MultiIndex):

        0   1   2   3   4   5
A   1   0.0 0.0 0.0 0.0 0.0 0.0
    2   0.0 0.0 0.0 0.0 0.0 0.0
B   1   0.0 0.0 0.0 0.0 0.0 0.0
    2   0.0 0.0 0.0 0.0 0.0 0.0

我可以使用以下代码成功添加小计:

(
    df
    .groupby(level=0)
    .apply(
        lambda df: pd.concat(
            [df.xs(df.name), df.sum().to_frame('Total').T]
        )
    )
)

它看起来像这样:

            0   1   2   3   4   5
A   1       0.0 0.0 0.0 0.0 0.0 0.0
    2       0.0 0.0 0.0 0.0 0.0 0.0
    Total   0.0 0.0 0.0 0.0 0.0 0.0
B   1       0.0 0.0 0.0 0.0 0.0 0.0
    2       0.0 0.0 0.0 0.0 0.0 0.0
    Total   0.0 0.0 0.0 0.0 0.0 0.0

但是,当我使用转置的DataFrame时,它不起作用。 DataFrame看起来像:

    A       B
    1   2   1   2
0   0.0 0.0 0.0 0.0
1   0.0 0.0 0.0 0.0
2   0.0 0.0 0.0 0.0
3   0.0 0.0 0.0 0.0
4   0.0 0.0 0.0 0.0
5   0.0 0.0 0.0 0.0

我使用以下代码:

(
    df2
    .groupby(level=0, axis=1)
    .apply(
        lambda df: pd.concat(
            [df.xs(df.name, axis=1), df.sum(axis=1).to_frame('Total')], 
            axis=1
        )
    )
)

我已经指定了axis=1我能想到的地方,但是我收到了一个错误:

  

ValueError:无法从重复轴重新索引

我希望输出为:

    A               B
    1   2   Total   1   2   Total
0   0.0 0.0 0.0     0.0 0.0 0.0
1   0.0 0.0 0.0     0.0 0.0 0.0
2   0.0 0.0 0.0     0.0 0.0 0.0
3   0.0 0.0 0.0     0.0 0.0 0.0
4   0.0 0.0 0.0     0.0 0.0 0.0
5   0.0 0.0 0.0     0.0 0.0 0.0

这是一个错误吗?或者我没有在任何地方正确指定轴?作为一种解决方法,我显然可以转置DataFrame,生成总计并转置回来,但我想知道它为什么不在这里工作,并在必要时提交错误报告。

可以使用以下命令生成问题DataFrame:

df2 = pd.DataFrame(
    np.zeros([6, 4]),
    columns=pd.MultiIndex.from_product([['A', 'B'], [1, 2]])
)

0 个答案:

没有答案