我有以下数据帧:
value timestamp
20.713936 2019-03-04 17:59:36 UTC
20.871742 2019-03-04 18:08:31 UTC
我想根据时间戳列的时差向数据帧添加新行(如果超过 1 分钟但少于 15 分钟)。它应该看起来像这样,尽管不完全是这样:
value timestamp
20.713936 2019-03-04 17:59:36 UTC
NaN 2019-03-04 18:00:36 UTC
NaN 2019-03-04 18:01:36 UTC
NaN 2019-03-04 18:02:36 UTC
NaN 2019-03-04 18:03:36 UTC
NaN 2019-03-04 18:04:36 UTC
NaN 2019-03-04 18:05:36 UTC
NaN 2019-03-04 18:06:36 UTC
NaN 2019-03-04 18:07:36 UTC
20.871742 2019-03-04 18:08:31 UTC
我想做一个函数来做这样的事情:
- 计算两个时间戳之间的时间差并检查 条件。
- 如果条件为 true,则在 差异并使用它来了解我将要成为多少行 插入(如果分钟差为 9,那么我将插入 8 个新行)。
- 以连续 +1 的增量填充新的时间戳行 纪要。
由于 Pandas 如此强大,我想知道是否有一种方法可以实现相同的目标,而无需编写这些函数并避免使用 if/for 循环。
我认为在每个以前的时间戳上添加 1 比找到等间距的时间戳向量更容易。
我也想过在辅助框架的帮助下做到这一点,并按时间戳进行"有序合并",但我迷失了这个。
有人知道如何做到这一点吗?
谢谢你的时间!
使用pandas.to_datetime
和pandas.DataFrame.asfreq
:
import pandas as pd
df
value timestamp
0 20.713936 2019-03-04 17:59:36
1 20.871742 2019-03-04 18:08:31
df['timestamp'] = pd.to_datetime(df['timestamp'])
new_df = df.set_index('timestamp', drop=True)
new_df = new_df.asfreq('1min').reset_index().append(df.iloc[-1]).reset_index(drop=True)
输出:
timestamp value
0 2019-03-04 17:59:36 20.713936
1 2019-03-04 18:00:36 NaN
2 2019-03-04 18:01:36 NaN
3 2019-03-04 18:02:36 NaN
4 2019-03-04 18:03:36 NaN
5 2019-03-04 18:04:36 NaN
6 2019-03-04 18:05:36 NaN
7 2019-03-04 18:06:36 NaN
8 2019-03-04 18:07:36 NaN
9 2019-03-04 18:08:31 20.871742
你应该看看pandas.date_range()。我认为这就是你要找的。