Vig*_*oTW 5 python dataframe pandas
我有一个数据框,其中的片段如下所示
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
Run Code Online (Sandbox Code Playgroud)
我想将其重新采样为“2S”,同时确保最后的测量值将替换任何 NaN。
df.resample('2S', on='Time').mean().ffill()
Run Code Online (Sandbox Code Playgroud)
结果的片段如下所示
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
Run Code Online (Sandbox Code Playgroud)
请注意时间戳 t=54s 处的值。我想要的是 t=53s 的温度 23.832,因为这是该时间戳的最后记录值。相反,它填充 t=55s 中的值
这就是我想要的输出。我不在乎它是在奇数秒还是偶数秒采样。
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
Run Code Online (Sandbox Code Playgroud)
编辑1: 回复后,我尝试了以下操作:
df.ffill().resample('2S', on='Time').first()
Run Code Online (Sandbox Code Playgroud)
但这给出了以下结果,其中新的 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
Run Code Online (Sandbox Code Playgroud)
编辑#3:
idx = df.resample('2S').asfreq().index
df.reindex(df.index.union(idx)).ffill().resample('2S').asfreq()
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
编辑#2:
idx = df.resample('2S').asfreq().index
df.reindex(df.index.union(idx)).bfill().resample('2S').first()
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
编辑:
df.reindex(df.index.union(df.resample('2S').asfreq().index))\
.interpolate().resample('2S').asfreq()
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
您想在奇数秒还是偶数秒重新采样两秒?
df.ffill().resample('2S', on='Time', base=1).mean()
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
或者只是偶数秒:
df.ffill().resample('2S', on='Time').mean()
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11378 次 |
| 最近记录: |