首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pandas df中添加缺少的日期,但日期范围具有(有效)重复项

在pandas df中添加缺少的日期,但日期范围具有(有效)重复项
EN

Stack Overflow用户
提问于 2020-09-17 08:46:59
回答 1查看 98关注 0票数 2

我有一个每秒接收多个值的数据集-最多100个DFS (不超过100个,但不是始终如一的100个)。挑战在于,日期字段没有捕获比秒更精确的时间,因此多个行具有相同的hh:mm:ss时间戳。这些都很好,但是我在整个集合中也缺少了几秒钟,也就是说,根本没有显示。

因此,我的2个初始列可能如下所示,其中我错过了54秒的步骤:

代码语言:javascript
复制
2020-08-24 03:36:53, 5
2020-08-24 03:36:53, 8
2020-08-24 03:36:53, 6
2020-08-24 03:36:55, 8

因为合法的日期“重复”和我需要的信息,我不想聚合,但我需要创建丢失的秒数,插入它们并填充(NaN等),这样我就可以适当地管理它们,以便与其他数据集对齐。

我唯一能做到这一点的方法似乎是使用嵌套的if循环,它查看前一个时间戳,如果它与当前单元格相同(pt == ct),则不执行任何操作,如果它比当前单元格少1 (pt = (ct-1)),则不执行任何操作,但如果它比当前单元格多2个或更多,则插入缺少的单元格(pt <= (ct-2)。这感觉有点麻烦(虽然可行)。我是不是错过了一种更简单的方法呢?

我在这里以及pandas.pydata.org上的各种函数中检查了很多“填充缺失日期”的线程,但重建索引和最常见的日期填充似乎都依赖于没有重复的日期。任何建议都是很棒的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-17 11:30:50

这可以通过创建一个包含您想要考虑的所有时间点的pandas序列来解决,然后使用原始数据帧对其进行merge

例如:

代码语言:javascript
复制
start, end = df['date'].min(), df['date'].max()
all_timepoints = pd.date_range(start, end, freq='s').to_series(name='date')

df.merge(all_timepoints , on='date', how='outer', sort=True).fillna(0)

将给予:

代码语言:javascript
复制
          date          value
0   2020-08-24 03:36:53   5.0
1   2020-08-24 03:36:53   8.0
2   2020-08-24 03:36:53   6.0
3   2020-08-24 03:36:54   0.0
4   2020-08-24 03:36:55   8.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63929754

复制
相关文章

相似问题

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