Pandas:groupby和datetime转换

Pandas:groupby和datetime转换,datetime,pandas,group-by,transform,Datetime,Pandas,Group By,Transform,我还是pandas的初学者,当我对多个列(包括一列dtype datetime64[ns])使用groupby转换操作时,我偶然发现了一个非常奇怪的行为 我的(玩具)例子是: import pandas as pd df = pd.DataFrame({'date': [pd.datetime(2014,3,17), pd.datetime(2014,3,24), pd.datetime(2014,3,17)], 'hdg_id': [4041,4041,4041],'stock': [1

我还是pandas的初学者,当我对多个列(包括一列dtype datetime64[ns])使用groupby转换操作时,我偶然发现了一个非常奇怪的行为

我的(玩具)例子是:

import pandas as pd
df = pd.DataFrame({'date': [pd.datetime(2014,3,17),    pd.datetime(2014,3,24), pd.datetime(2014,3,17)], 'hdg_id': [4041,4041,4041],'stock': [1.0,1.0,1.0]})

In[117]: df
Out[117]: 
    date  hdg_id  stock
0 2014-03-17    4041      1
1 2014-03-24    4041      1
2 2014-03-17    4041      1
我现在按日期和hdg_id分组(对于hdg_id来说,这很简单,因为只有一个唯一的值,但我需要多个分组来生成结果,我的实际应用程序当然更复杂):

这不是我期望的结果。如果我将列日期转换为字符串类型,我将得到预期结果:

In[129]: df['date']=df['date'].astype(str)
In[131]: df.groupby(['date', 'hdg_id']).transform(sum)
Out[131]: 
   stock
0      2
1      1
2      2
有人能告诉我发生了什么事吗


非常感谢

是否有理由使用.transform(sum)

你可以这样做: df.groupby(['date','hdg_id']).sum()

对我来说,这看起来像一个bug,如果分组的列不是datetime,那么它会按预期工作,同样,如果您通过这些列设置索引,那么它会按预期工作。这似乎是一个已知bug,将在下一个版本中修复:@John and Ed:非常感谢,至少在某种程度上,这是有用的:)。谢谢您的回答,但我需要转换,因为我需要保留原始数据帧以供进一步处理。
In[129]: df['date']=df['date'].astype(str)
In[131]: df.groupby(['date', 'hdg_id']).transform(sum)
Out[131]: 
   stock
0      2
1      1
2      2