2017-08-08 480 views
5

我有以下代码...由于某些原因导致'key'列消失。我还注意到其他时候,关键列似乎“随机”消失。我试图隔离案件,这是一个。在在Pandas中,为什么groupby'key'列在这种情况下消失

G N 
1 b 2 
2 b 3 

第二print groupByObj.get_group('b')结果:

N 
1 2 
2 3 

为什么会出现“键

我usinng大熊猫版本0.20.1

DF = pd.DataFrame([['a', 1], ['b', 2], ['b', 3]], columns = ['G', 'N']) 
groupByObj = DF.groupby('G') 
print groupByObj.get_group('b') 
groupByObj.sum() 
print groupByObj.get_group('b') 

第一print groupByObj.get_group('b')结果'列('G')在运行后消失

+0

附加信息:如果在创建对象时传递'as_index = False',则不会发生'groupByObj = DF.groupby('G',as_index = False)'。 – ayhan

+0

这看起来像一个错误,似乎聚合操作以某种方式改变或在'groupby'对象上引入某种缓存操作。这发生在我的机器上,使用熊猫版本'0.20.3'我会在[github]上发布这个问题(https://github.com/pandas-dev/pandas/issues)。一旦调用'sum'然后调用'get_group',就会发生这种情况。对我来说,它看起来像第一个输出是不正确的,'G'列应该成为索引,但它不会执行聚合。 – EdChum

+0

再看一遍,我认为第一个输出是错误的,'G'列应该形成索引,这似乎并没有发生,直到你执行聚合,所以'get_group'没有正确地做到这一点 – EdChum

回答

1

这是熊猫的错误​​,在所讨论的:

后者仍然是开放的。

从阅读在GitHub上了一下,如在评论中提到的,似乎第二输出想要的行为,并通过添加以下行pandas.core.groupby._GroupBy#_set_group_selectionsum情况下获得:

self._reset_cache('_selected_obj') 

由于此调用在调用sum(以及其他一些函数)时发生,因此此G列在第一个get_group调用中仍可见。顺便说一句 - 在调用mean以及一些其他功能时也不会执行重置。看起来这个bug比想象的更全面,并没有通过简单的缓存重置来解决。

相关问题