在多索引数据帧上使用groupby / apply时,索引级别加倍

时间:2015-11-30 17:00:12

标签: python pandas

groupby apply上使用MultiIndex / DataFrame链时遇到问题:结果数据框包含两次分组的级别!

示例数据框:

df = pandas.DataFrame(dict(a=[1, 2, 3, 4, 5, 6], b=[6, 7, 8, 9, 0, 0]),
                      index=pandas.MultiIndex.from_product([[1, 2], [3, 4, 5]]))

     a  b
1 3  1  6
  4  2  7
  5  3  8
2 3  4  9
  4  5  0
  5  6  0

在这个例子中,我简单地对行进行求和(我实际上有另一个函数,但是它也接受并返回一个数据帧):

df.groupby(level=0).apply(lambda x: x.sum(axis=1))

它给了我以下结果:

1  1  3     7
      4     9
      5    11
2  2  3    13
      4     5
      5     6
dtype: int64

所以现在我有三个索引级别,其中一个分组为doubled。当我按两个级别分组时,整个多索引加倍:

df.groupby(level=[0,1]).apply(lambda x: x.sum(axis=1))

1  3  1  3     7
   4  1  4     9
   5  1  5    11
2  3  2  3    13
   4  2  4     5
   5  2  5     6
dtype: int64

如果我设置as_index=False,我仍然会得到另一个索引级别,包含升序数字:

df.groupby(level=[0,1], as_index=False).apply(lambda x: x.sum(axis=1))

0  1  3     7
1  1  4     9
2  1  5    11
3  2  3    13
4  2  4     5
5  2  5     6
dtype: int64

这是预期的行为吗?如何避免创建另一个索引级别?每次进行分组/应用操作时,是否必须手动将其删除?

1 个答案:

答案 0 :(得分:2)

还有group_keys选项,只留下应用于各个块的MultiIndex返回的Series {/ 1}}:

.sum(axis=1)