我有一些颗粒物传感器和带有时间序列的CSV文件,例如:
传感器A:
我使用以下代码将日期设置为索引:
我想将来自同一传感器和不同传感器的数据在相似时间窗口内进行相关性分析。我希望能知道某些时段/日子内是否存在相同的增长/减少行为。在设置“日期索引”后,我可以获取“从传感器A每天上午9点到10点的所有PM值”。
问题1:如何检查来自同一传感器但不同日期的相关性:我从两天中的9/10am过滤了数据,并将其存储在两个DataFrame中,但它们并不总是在完全相同的时间被记录。我可能会遇到这样的情况:
我应该重命名数据列吗?我实际上关心的是,从2018年1月1日开始的第三个值将与第二个窗口中的第三个值相关联。
返回
问题2:不同传感器之间的相关性。在这种情况下,我有两个带有来自两个传感器的PM值的CVS文件。与问题1一样,我想要将它们的相同时间窗口进行相关性分析。 即使在这种情况下,我也预计数据之间会存在一些“偶然滞后”,但是每分钟之间的误差都可以接受,我只想检查“正确位置”的值。例如:
预先感谢你。
传感器A:
date value
date
2017-11-30 00:00:00 30/11/17 0.00 49
2017-11-30 00:02:00 30/11/17 0.02 51
2017-11-30 00:03:00 30/11/17 0.03 54
2017-11-30 00:05:00 30/11/17 0.05 57
2017-11-30 00:07:00 30/11/17 0.07 53
2017-11-30 00:08:00 30/11/17 0.08 55
2017-11-30 00:10:00 30/11/17 0.10 55
2017-11-30 00:12:00 30/11/17 0.12 58
2017-11-30 00:13:00 30/11/17 0.13 57
2017-11-30 00:15:00 30/11/17 0.15 58
....
2018-02-06 09:30:00 6/2/18 9.30 33
2018-02-06 09:32:00 6/2/18 9.32 31
2018-02-06 09:33:00 6/2/18 9.33 34
2018-02-06 09:35:00 6/2/18 9.35 32
2018-02-06 09:37:00 6/2/18 9.37 33
2018-02-06 09:38:00 6/2/18 9.38 30
我使用以下代码将日期设置为索引:
df.index = pd.to_datetime(df['date'], format='%d/%m/%y %H.%M')
我想将来自同一传感器和不同传感器的数据在相似时间窗口内进行相关性分析。我希望能知道某些时段/日子内是否存在相同的增长/减少行为。在设置“日期索引”后,我可以获取“从传感器A每天上午9点到10点的所有PM值”。
df.between_time('9:00','10:00')
问题1:如何检查来自同一传感器但不同日期的相关性:我从两天中的9/10am过滤了数据,并将其存储在两个DataFrame中,但它们并不总是在完全相同的时间被记录。我可能会遇到这样的情况:
01-01-2018 (df01 - I removed data column)
2018-01-01 09:05:00 11
2018-01-01 09:07:00 11
2018-01-01 09:09:00 10
....
02-01-2018 (df02)
2018-02-01 09:05:00 67
2018-02-01 09:07:00 68
2018-02-01 09:08:00 67
....
我应该重命名数据列吗?我实际上关心的是,从2018年1月1日开始的第三个值将与第二个窗口中的第三个值相关联。
df01.corr(df02)
返回
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
问题2:不同传感器之间的相关性。在这种情况下,我有两个带有来自两个传感器的PM值的CVS文件。与问题1一样,我想要将它们的相同时间窗口进行相关性分析。 即使在这种情况下,我也预计数据之间会存在一些“偶然滞后”,但是每分钟之间的误差都可以接受,我只想检查“正确位置”的值。例如:
Sensor A:
date value
date
2017-11-30 00:00:00 30/11/17 0.00 49
2017-11-30 00:02:00 30/11/17 0.02 51
2017-11-30 00:03:00 30/11/17 0.03 54
2017-11-30 00:05:00 30/11/17 0.05 57
Sensor B:
date value
date
2017-11-30 00:00:00 30/11/17 0.00 1
2017-11-30 00:02:00 30/11/17 0.02 40
2017-11-30 00:04:00 30/11/17 0.03 11
2017-11-30 00:05:00 30/11/17 0.05 57
AxB
date valueA valueB
date
2017-11-30 00:00:00 30/11/17 0.00 49 1
2017-11-30 00:02:00 30/11/17 0.02 51 40
2017-11-30 00:03:00 30/11/17 0.03 54 11
2017-11-30 00:05:00 30/11/17 0.05 57 57
预先感谢你。
merge_asof(df1, df2)
应该是最简洁的方法,可以将df1
中的所有行与来自df2
的最接近的匹配合并。如果您选择 numpy 数组路线,您可能需要手动修剪较长的数组以匹配较短数组的长度,类似于:a2 = a[:b.shape[0]]; b2 = b[:a.shape[0]]
(这将截断a2
和b2
以匹配两者中较短的长度)。 - Peter Leimbigler