Python 前向填充(ffill)值时对数据帧重新采样

Python 前向填充(ffill)值时对数据帧重新采样,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,其中一个片段如下所示 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

我有一个数据框,其中一个片段如下所示

    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
                        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
我想将其重新采样为“2S”,同时确保最后测量的值将替换任何NaN

df.resample('2S', on='Time').mean().ffill()
结果的一个片段如下所示

    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
                        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
编辑#3:

输出:

                     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
                     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
                     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
                    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
                     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

编辑#2:

输出:

                     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
                     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
                     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
                    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
                     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

编辑:

输出:

                     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
                     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
                     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
                    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
                     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

是否要在奇数秒或偶数秒上重新采样两秒

df.ffill().resample('2S', on='Time', base=1).mean()
输出:

                     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
                     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
                     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
                    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
                     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
或者仅仅是偶数秒:

df.ffill().resample('2S', on='Time').mean()
输出:

                     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
                     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
                     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
                    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
                     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

编辑为使用最后一个,而不是第一个。可能与示例数据无关,但如果您在2秒内有多条记录,这将确保您使用最新的记录

在重新采样时,有一个选项可以指定要标记数据的箱子边缘。S的默认值为左-因此2秒时间段的开始。切换到
右侧
我相信可以满足您的需求

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

首先做
fillna(method='ffill')
然后尝试重新采样..首先向前填充,然后根据OP的评论重新采样我想他们是在寻找
First
而不是
意思是
df.ffill()。重新采样('2S',on='Time')。First()
。“在时间戳t=54s时,我想要的是t=53s时的温度23.832,”当我写入
df.ffill().重新采样('2S',on='Time')。first()
,我仍然没有得到我想要的结果…:\t=52s的值被复制到t=52s。尽管我非常感谢您的努力,但我们的新编辑仍然无法提供所需的输出。这是一个奇怪的请求,但有必要模拟我们正在使用的控制器是如何记录数据的。您是否只想将数据移回1S?23.809的预期输出来自哪里?@ScottBoston我想你误读了我的帖子。我的预期(/期望)数据在编辑2下面。这里没有23.809的值。此外,edit2中的输出在某种程度上是正确的,但是值出现得太早了两秒。