我有两个数据集,A和B:
设置A:
日期时间 数据
6/21/2016 00:00:01 1
6/21/2016 01:00:00 2
6/21/2016 02:03:00 3
设置B:
日期时间 数据
2016/6/21 00:01:10 10
6/21/2016 01:02:00 20
6/21/2016 01:23:00 30
6/21/2016 01:30:00 40
6/21/2016 02:01:00 50
我可以在两个单独的图上绘制两组,其开始和结束时间戳大致相同。 (实际上,Set B增量为5秒,Set A增量为1分钟)
我想做的是:
1)用秒填充Set A和Set B(见下表)。
2)空数据正常,matplotter
应该忽略它
3)用新的日期时间绘制
目的:我想这样做是将多个数据源(datetime-temperature,datetime-datalogger等)与单个时间线组合在一起。
我的问题:
a)是否有预先构建的算法(matplotlib,datetime,其他一些模块)来完成1)?
b)如果a)是否定的,那么完成1)的最佳方法是什么?
c)是否有更好(更容易)的方法来实现目的?
设置A:
日期时间 数据
6/21/2016 00:00:01 1
2016/6/21 00:00:02
2016/6/21 00:00:03
...
2016/6/21 00:59:58
2016/6/21 00:59:59
6/21/2016 01:00:00 2
6/21/2016 01:00:01
6/21/2016 01:00:02
...
6/21/2016 02:02:58
6/21/2016 02:02:59
6/21/2016 02:03:00 3
设置B:
日期时间 数据
6/21/2016 00:00:01
2016/6/21 00:00:02
...
2016/6/21 00:01:08
2016/6/21 00:01:09
2016/6/21 00:01:10 10
2016/6/21 00:01:11
2016/6/21 00:01:12
...
6/21/2016 02:00:58
6/21/2016 02:00:59
6/21/2016 02:01:00 50
...
6/21/2016 02:02:59
6/21/2016 02:03:00
答案 0 :(得分:2)
跳过问题(c)的权利,如果是我,我不会用第二个分辨率填充两个数据集。相反,我会做一个简单的pd.merge
和情节。
df_C = pd.merge(df_A, df_B, how='outer', left_index=True, right_index=True)
# forward fill data
df_C.ffill(inplace=True)
现在df_C
是
In [68]: df_c
Out[68]:
dataA dataB
2016-06-21 00:00:01 1.0 NaN
2016-06-21 00:01:10 1.0 10.0
2016-06-21 01:00:00 2.0 10.0
2016-06-21 01:02:00 2.0 20.0
2016-06-21 01:23:00 2.0 30.0
2016-06-21 01:30:00 2.0 40.0
2016-06-21 02:01:00 2.0 50.0
2016-06-21 02:03:00 3.0 50.0
然后只需致电df_C.plot()
即可绘制数据。
如果您想要获得第二个分辨率,可以通过使用pd.date_range
df_C.reindex(pd.date_range(df_C.index.min(), df_C.index.max(), freq='s'))