Python 每组时间戳之间的平均时间不符合顺序

Python 每组时间戳之间的平均时间不符合顺序,python,pandas,dataframe,Python,Pandas,Dataframe,我想得到每组时间戳之间的平均时间。但是,这些组不是按顺序排列的 创建df的代码: d = {'ID': ['AI100', 'AI200', 'AI200', 'AI100','AI200','AI100'], 'Date': ['2019-01-10', '2018-06-01', '2018-06-11','2019-01-15','2018-06-21', '2019-01-22']} data = pd.DataFrame(data=d) data = data[['ID',

我想得到每组时间戳之间的
平均时间。但是,这些组不是按顺序排列的

创建df的代码:

d = {'ID': ['AI100', 'AI200', 'AI200', 'AI100','AI200','AI100'],
     'Date': ['2019-01-10', '2018-06-01', '2018-06-11','2019-01-15','2018-06-21', '2019-01-22']}

data = pd.DataFrame(data=d)
data = data[['ID', 'Date']]
data['Date'] = pd.to_datetime(data['Date'])
data  

    ID  Date
0   AI100   2019-01-10
1   AI200   2018-06-01
2   AI200   2018-06-11
3   AI100   2019-01-15
4   AI200   2018-06-21
5   AI100   2019-01-22
我尝试了以下方法:

data = data.sort_values(['ID','Date'],ascending=True).groupby('ID').head(3) #group the IDs
data['diffs'] = data['Date'].diff()
data['diffs'] = data['diffs'].apply(lambda x: x.days)
data = data.groupby(['ID'])[('diffs')].agg('mean')
然而,这会产生:

data.add_suffix('ID').reset_index()

    ID  diffs
0   AI100ID 6.000000
1   AI200ID -71.666667
AI100ID
的平均时间正确,但组
AI200ID
的平均时间不正确


出了什么问题?

我认为您遇到的问题是,您没有按组计算差异,所以它是在计算前一组的最后一个值和新组的第一个值之间的差异

将您的行更改为此,您将获得预期结果:

data['diffs'] = data.groupby('ID')['Date'].diff()
脚注:

另一个与主要问题无关的提示,但以防您不知道:

data['diffs'] = data['diffs'].apply(lambda x: x.days)
可以使用
.dt
访问器编写以使用更快的矢量化操作:

data['diffs'] = data['diffs'].dt.days