【发布时间】:2020-01-25 08:56:41
【问题描述】:
例如
import datetime
data={'date':[datetime.date(2020,1,i) for i in range(11,13)],
'a1':range(11,13),
'a2':range(21,23)}
df=pd.DataFrame(data)
如果我们只按日期列分组,一切正常
g=df.groupby('date')
print(g.groups)
g.get_group(list(g.groups.keys())[0])
给予
{datetime.date(2020, 1, 11): Int64Index([0], dtype='int64'), datetime.date(2020, 1, 12): Int64Index([1], dtype='int64')}
date a1 a2
0 2020-01-11 11 21
但是,如果我们将两列分组以形成多索引,我们就会遇到问题
g=df.groupby(['date','a1'])
print(g.groups)
g.get_group(list(g.groups.keys())[0])
给予
{(Timestamp('2020-01-11 00:00:00'), 11): Int64Index([0], dtype='int64'), (Timestamp('2020-01-12 00:00:00'), 12): Int64Index([1], dtype='int64')}
和错误信息
----------------------------------- ---------------------------- KeyError Traceback(最近一次调用 最后)在 1 g=df.groupby(['日期','a1']) 2 打印(g.groups) ----> 3 g.get_group(list(g.groups.keys())[0])
~/anaconda3/lib/python3.7/site-packages/pandas/core/groupby/groupby.py 在 get_group(self, name, obj) 678 inds = self._get_index(名称) 679 如果不是 len(inds): --> 680 引发 KeyError(name) 681 第682章
KeyError: (Timestamp('2020-01-11 00:00:00'), 11)
我们可以看到 pandas groupby 太聪明了,无法将 datetime.date 对象更改为 Timestamp 对象。而且它弄乱了索引,我们无法获得正确的组。是bug吗?
【问题讨论】: