2017-09-23 22 views
0
>>> df = pd.DataFrame(zip(np.random.rand(5).tolist(), [1]*5, [dt.date.today()]*5), columns=list('abc')) 
>>> df 
    a b c 
0 0.896739 1 2017-09-24 
1 0.473168 1 2017-09-24 
2 0.100591 1 2017-09-24 
3 0.870899 1 2017-09-24 
4 0.716934 1 2017-09-24 

>>> print df.groupby('c').a.apply(lambda x: x.max()).index 
Index([2017-09-24], dtype='object', name=u'c') 

>>> df.groupby(['b', 'c']).a.apply(lambda x: x.max()).index 
MultiIndex(levels=[[1], [2017-09-24 00:00:00]], labels=[[0], [0]], 
     names=[u'b', u'c']) 

>>> print df.groupby(['b', 'c']).a.max().index 
MultiIndex(levels=[[1], [2017-09-24]], labels=[[0], [0]], 
     names=[u'b', u'c']) 

グループ化すると、2番目のケースで日付フィールドが変換されるのはなぜですか?私はパンダ実際0.19.2時点Pandasデータフレームgroupby on日付フィールド

+0

同じ問題0.20.3' 'に - それが見えますバグのような。 'print(df.groupby([' b '、' c '])a.apply(lambda x:x.max())。index.get_level_values(1)) ' – jezrael

答えて

0

に使用しています

は、唯一の第二の場合には、日付フィールドは、タイムスタンプに変換されます。ケース1と3では、日付フィールドは日付:

非常に興味深い観察です。 Datetime.dateオブジェクトの処理に関しては、Index.mx()とSeries.apply()は一貫して実装されていないようです。

ソリューション:あなたは最初からpandas.Timestampまたはnumpy.datetime64へdt.date.today()を変換する場合は、日付フィールドはすべて一貫しているが、タイムスタンプ:

df = pd.DataFrame(list(zip(np.random.rand(5).tolist(), [1]*5, [np.datetime64(dt.date.today())]*5)), columns=list('abc')) 
print(df.groupby('c').a.apply(lambda x: x.max()).index.tolist()) 
print(df.groupby('c').a.max().index.tolist()) 
print(df.groupby(['b', 'c']).a.apply(lambda x: x.max()).index.tolist()) 
print(df.groupby(['b', 'c']).a.max().index.tolist()) 
関連する問題