【问题标题】:pandas groupby datetime.date object is not consistentpandas groupby datetime.date 对象不一致
【发布时间】: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吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    IIUC 你可以尝试这样分组:

    g=df.groupby([['date','a1']])
    print(g.groups)
    g.get_group(list(g.groups.keys())[0])
    

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2017-09-11
      • 2019-12-07
      • 2019-10-18
      相关资源
      最近更新 更多