Ресэмплирование кадра данных Pandas при прямом заполнении (заполнении) значений - PullRequest
1 голос
/ 13 марта 2019

У меня есть фрейм данных, где фрагмент выглядит следующим образом

    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 = 54 с.То, что я хочу, это температура 23,832 от t = 53 с, так как это последнее записанное значение на этой отметке времени.Вместо этого он заполняется значением t = 55s

Edit 1: После ответа я попытался сделать следующее:

df.ffill().resample('2S', on='Time').first()

Но это дает следующий результат,где новые t = 52 с равны старым t = t = 53 с, что не является поведением, которое я испытываю после ...

                        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

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Редактировать # 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
0 голосов
/ 14 марта 2019

ИЗМЕНЕНО для использования последним, а не первым.Возможно, это не имеет значения для ваших выборочных данных, но если у вас есть несколько записей в течение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...