不使用MultiIndex的Pandas GroupBy

3
如果我设置以下数据框和字典(pandas 0.22.0):
kwargs = {
  'index': ['11-1000', '11-1001', '11-1002'],
  'data': np.random.randint(5, size=(3,2)),
  'columns': ['A', 'B']
}
df = pd.DataFrame(**kwargs)

df         A  B
>> 11-1000 2  1
>> 11-1001 1  4
>> 11-1002 2  3

并且

by = {'11-1001': '11-1000', '11-1002': '11-1000'}

我想按照这个字典进行分组,但结果似乎不正确:
df.groupby(by=by, level=0).get_group('11-1000')
>>         A B
>> 11-1000 2 1

当我期待类似这样的东西时
>>         A  B
>> 11-1001 1  4
>> 11-1002 2  3

如果我有一个MultIndex作为起点,那么:
df = df.set_index('A", append=True)
df
>>            B
>>         A
>> 11-1000 2  1
>> 11-1001 1  4
>> 11-1002 2  3

那么看起来,groupby可以给我想要的结果:

df.groupby(by=by, level=0).get_group('11-1000')
>>            B
>>         A
>> 11-1001 1  4
>> 11-1002 2  3

对此有何想法?我几乎总是在使用MultiIndex时使用groupby,所以我以前没有见过这种行为,也不确定它是否正常。如何在没有MultiIndex的情况下获得所需的行为?


1
我相信不为 level 参数传递任何内容(或者 level=None)可以得到你想要的行为。如果没有 MultiIndex,我不知道 level 的行为是否被定义得很好。 - Victor Chubukov
@VictorChubukov 把它变成一个答案 :-) - BENY
@VictorChubukov 非常有道理,对我很有效。谢谢! 编辑:如果您提交正式答案,我会接受它。我想我不能将评论作为答案接受...我对实际使用 SO 还是比较新的。 - Ironbeard
1个回答

2

我认为在没有多级索引的情况下,level参数的行为并不是特别明确定义的。

传递 level=None(默认值)可以获得您想要的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接