首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每组时间戳之间的平均时间不一致

每组时间戳之间的平均时间不一致
EN

Stack Overflow用户
提问于 2019-01-27 19:46:35
回答 1查看 38关注 0票数 0

我想得到每组时间戳之间的mean时间。然而,这些组并没有被排序。

创建df的代码:

代码语言:javascript
运行
复制
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

我尝试了以下几点:

代码语言:javascript
运行
复制
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')

然而,这产生了:

代码语言:javascript
运行
复制
data.add_suffix('ID').reset_index()

    ID  diffs
0   AI100ID 6.000000
1   AI200ID -71.666667

AI100ID组的平均时间是正确的,但AI200ID组的时间不正确。

出什么问题了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-27 19:55:47

我认为这里的问题是,您没有按组计算您的差异,所以它正在计算前一个组的最后一个值与新组的第一个值之间的差异。

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

代码语言:javascript
运行
复制
data['diffs'] = data.groupby('ID')['Date'].diff()

脚注:

另一个与主要问题无关的技巧,但以防你不知道:

代码语言:javascript
运行
复制
data['diffs'] = data['diffs'].apply(lambda x: x.days)

可以使用.dt访问器编写以使用更快的矢量化操作:

代码语言:javascript
运行
复制
data['diffs'] = data['diffs'].dt.days
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54392217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档