我有一个数据段,其中的片段看起来像这样
Time Temperature
19 2019-01-01 11:48:51 23.798
20 2019-01-01 11:48:53 23.832
21 2019-01-01 11:48:54 NaN
22 2019-01-01 11:48:55 23.817
23 2019-01-01 11:48:56 NaN
我想将其重新采样为“ 2S”,同时确保最后一个测量值将替换所有NaN。
df.resample('2S', on='Time').mean().ffill()
结果摘录如下
Temperature
Time
2019-01-01 11:48:52 23.832
2019-01-01 11:48:54 23.817
2019-01-01 11:48:56 23.809
注意时间戳t = 54s处的值。我想要的是从t = 53s开始的温度23.832,因为这是该时间戳的最后记录值。而是用t = 55s的值填充
修改1: 回复后,我尝试了以下操作:
df.ffill().resample('2S', on='Time').first()
但这给出了以下结果,其中新的t = 52s等于旧的t = t = 53s,这不是我所追求的行为...
Temperature
Time
2019-01-01 11:48:50 23.798
2019-01-01 11:48:52 23.832
2019-01-01 11:48:54 23.832
2019-01-01 11:48:56 23.817
编辑2: 为了更容易理解,这是我想要的输出。我不在乎它是在奇数秒还是偶数秒采样的。
Temperature
Time
2019-01-01 11:48:52 23.798
2019-01-01 11:48:54 23.832
2019-01-01 11:48:56 23.817
答案 0 :(得分:1)
编辑#3:
idx = df.resample('2S').asfreq().index
df.reindex(df.index.union(idx)).ffill().resample('2S').asfreq()
输出:
Temperature
Time
2019-01-01 11:48:50 NaN
2019-01-01 11:48:52 23.798
2019-01-01 11:48:54 23.832
2019-01-01 11:48:56 23.817
编辑#2:
idx = df.resample('2S').asfreq().index
df.reindex(df.index.union(idx)).bfill().resample('2S').first()
输出:
Temperature
Time
2019-01-01 11:48:50 23.798
2019-01-01 11:48:52 23.832
2019-01-01 11:48:54 23.817
2019-01-01 11:48:56 NaN
编辑:
df.reindex(df.index.union(df.resample('2S').asfreq().index))\
.interpolate().resample('2S').asfreq()
输出:
Temperature
Time
2019-01-01 11:48:50 NaN
2019-01-01 11:48:52 23.8150
2019-01-01 11:48:54 23.8245
2019-01-01 11:48:56 23.8170
您想在几秒钟甚至几秒钟的时间内重新采样两秒吗?
df.ffill().resample('2S', on='Time', base=1).mean()
输出:
Temperature
Time
2019-01-01 11:48:51 23.798
2019-01-01 11:48:53 23.832
2019-01-01 11:48:55 23.817
或者仅偶数秒:
df.ffill().resample('2S', on='Time').mean()
输出:
Temperature
Time
2019-01-01 11:48:50 23.7980
2019-01-01 11:48:52 23.8320
2019-01-01 11:48:54 23.8245
2019-01-01 11:48:56 23.8170
答案 1 :(得分:0)
编辑后使用,而不是第一个。可能与样本数据无关紧要,但是如果您在2秒钟内有多个记录,则可以确保您使用的是最新记录。
重采样时有一个选项可以指定垃圾箱的哪个边缘来标记数据。 S的默认值为左-因此是2秒时间段的开始。我相信更改为right
可以满足您的需求。
df.resample('2S', on='Time', label='right').last().ffill()
Time Temperature
2019-01-01 11:48:52 23.798
2019-01-01 11:48:54 23.832
2019-01-01 11:48:56 23.817
2019-01-01 11:48:58 23.817