在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
这是预期的行为吗?如何避免创建另一个索引级别?每次进行分组/应用操作时,是否必须手动将其删除?
答案 0 :(得分:2)
还有group_keys
选项,只留下应用于各个块的MultiIndex
返回的Series
{/ 1}}:
.sum(axis=1)