Python 为什么pandas表示在datetime上处理系列而不是groupby对象

Python 为什么pandas表示在datetime上处理系列而不是groupby对象,python,pandas,datetime,mean,Python,Pandas,Datetime,Mean,我试着按组计算日期的平均值 import pandas as pd df = pd.DataFrame({'Id': ['A', 'A', 'B', 'B'], 'Date': [pd.datetime(2000, 12, 31), pd.datetime(2002, 12, 31), pd.datetime(2000, 6, 30), pd.datetime(2002, 6, 30)]}) 这一直

我试着按组计算日期的平均值

import pandas as pd

df = pd.DataFrame({'Id': ['A', 'A', 'B', 'B'],
                   'Date': [pd.datetime(2000, 12, 31), pd.datetime(2002, 12, 31),
                            pd.datetime(2000, 6, 30), pd.datetime(2002, 6, 30)]})
这一直是一个痛苦的事情,所以我很高兴地得知,这显然已在熊猫0.25固定

但是,这不能使用“groupby”实现

df.groupby('Id')['Date'].mean()

Traceback (most recent call last):

  File "<ipython-input-46-5fae5ffac6c6>", line 1, in <module>
    df.groupby('Id')['Date'].mean()

  File "C:\Users\xxx\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 1205, in mean
"mean", alt=lambda x, axis: Series(x).mean(**kwargs), **kwargs

  File "C:\Users\xxx\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 888, in _cython_agg_general
raise DataError("No numeric types to aggregate")

DataError: No numeric types to aggregate
df.groupby('Id')['Date'].mean()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
df.groupby('Id')['Date'].mean()
文件“C:\Users\xxx\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\groupby\groupby.py”,第1205行,平均值
“平均值”,alt=λx,轴:系列(x)。平均值(**kwargs),**kwargs
文件“C:\Users\xxx\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\groupby\groupby.py”,第888行,位于“cython\u agg\u general”中
raise DATAFERROR(“没有要聚合的数字类型”)
DataError:没有要聚合的数字类型
这里发生了什么,是否有简单的解决方法?

将lambda函数与或一起使用:

不同之处在于,如果有多个列:

df = pd.DataFrame({'Id': ['A', 'A', 'B', 'B'],
                   'Date': [pd.datetime(2000, 12, 31), pd.datetime(2002, 12, 31),
                            pd.datetime(2000, 6, 30), pd.datetime(2002, 6, 30)]})
df['Date1'] = df['Date']
print (df.groupby('Id').agg(lambda x: x.mean()))
         Date      Date1
Id                      
A  2001-12-31 2001-12-31
B  2001-06-30 2001-06-30
print (df.groupby('Id').agg(pd.Series.mean))
         Date      Date1
Id                      
A  2001-12-31 2001-12-31
B  2001-06-30 2001-06-30

print (df.groupby('Id').apply(lambda x: x.mean()))
Empty DataFrame
Columns: []
Index: []

print (df.groupby('Id').apply(pd.Series.mean))
Empty DataFrame
Columns: []
Index: []
为什么pandas表示在datetime上处理系列而不是groupby对象


不久前,系列、日期时间、检查的
mean
有问题,因此在pandas的下一个版本中可能会出现这种情况。

Ok。呵呵。容易的。为什么很难?我必须使用“申请”吗?
print (df.groupby('Id')['Date'].agg(lambda x: x.mean()))
print (df.groupby('Id')['Date'].agg(pd.Series.mean))
print (df.groupby('Id')['Date'].apply(lambda x: x.mean()))
print (df.groupby('Id')['Date'].apply(pd.Series.mean))

Id
A   2001-12-31
B   2001-06-30
Name: Date, dtype: datetime64[ns]
df = pd.DataFrame({'Id': ['A', 'A', 'B', 'B'],
                   'Date': [pd.datetime(2000, 12, 31), pd.datetime(2002, 12, 31),
                            pd.datetime(2000, 6, 30), pd.datetime(2002, 6, 30)]})
df['Date1'] = df['Date']
print (df.groupby('Id').agg(lambda x: x.mean()))
         Date      Date1
Id                      
A  2001-12-31 2001-12-31
B  2001-06-30 2001-06-30
print (df.groupby('Id').agg(pd.Series.mean))
         Date      Date1
Id                      
A  2001-12-31 2001-12-31
B  2001-06-30 2001-06-30

print (df.groupby('Id').apply(lambda x: x.mean()))
Empty DataFrame
Columns: []
Index: []

print (df.groupby('Id').apply(pd.Series.mean))
Empty DataFrame
Columns: []
Index: []