我希望获得每个组的两次时间戳之间的mean
时间。但是,这些组没有顺序。
创建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
的平均时间正确。
出了什么问题?
答案 0 :(得分:1)
我认为您遇到的问题是,您不是在按组计算差异,而是要计算前一组的最后一个值和新组的第一个值之间的差。
将行更改为此,您将获得预期的结果:
data['diffs'] = data.groupby('ID')['Date'].diff()
脚注:
与主要问题无关的另一个提示,以防万一您不知道:
data['diffs'] = data['diffs'].apply(lambda x: x.days)
可以使用.dt
访问器编写为使用更快的矢量化操作:
data['diffs'] = data['diffs'].dt.days