Эй, ребята, у меня есть такой набор данных:
index uid level sec
Time
2019-12-16 01:38:30 257 Z8RsBpxhnkebK5fvahVCmfV7icO2 wake 30
2019-12-16 01:39:00 258 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 5520
2019-12-16 03:11:00 259 Z8RsBpxhnkebK5fvahVCmfV7icO2 rem 480
2019-12-16 03:19:00 260 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 660
2019-12-16 03:19:00 260 HFxeriowjryghdsjuihdjsuiuiw3 light 660
Я хочу применить повторную выборку для этого набора данных на 15 минут. Я применил
data =dataM.reset_index().set_index('time').resample('15min').mean()
, и у меня есть такой вывод:
index sec
time
2019-12-16 01:30:00 257.500000 2775.0
2019-12-16 01:45:00 NaN NaN
2019-12-16 02:00:00 NaN NaN
2019-12-16 02:15:00 NaN NaN
2019-12-16 02:30:00 NaN NaN
2019-12-16 02:45:00 NaN NaN
2019-12-16 03:00:00 259.000000 480.0
2019-12-16 03:30:00 260.000000 1300.0
Моя проблема в том, что я хочу сохранить некоторые поля, которые я не хочу пересчитывать: Мой вывод должен быть:
index uid sec
Time
2019-12-16 01:30:00 257 Z8RsBpxhnkebK5fvahVCmfV7icO2 2775
2019-12-16 03:00:00 259 Z8RsBpxhnkebK5fvahVCmfV7icO2 480
2019-12-16 03:15:00 260 Z8RsBpxhnkebK5fvahVCmfV7icO2 660
2019-12-16 03:15:00 260 HFxeriowjryghdsjuihdjsuiuiw3 660
Поскольку некоторые поля должны совпадать с исходным набором данных (поскольку идентификатор не изменяется и индекс тоже)
В этом типе понижения полезно использовать среднее или сумма? Эти данные - время сна людей (учитывая идентификатор). Я попробовал оба оператора, и я думаю, что сумма должна быть лучше в этом случае, потому что со значением я теряю некоторую информацию (я думаю), а не с суммой, я просто сохраняю данные, сначала или раньше.
В этом примере сумма (время сна) в 1:38 равна 5550 в 1:30. Среднее значение - это всего лишь 1.30 ночи, а сон - только 2775 секунды. График будет другим.
РЕДАКТИРОВАТЬ: с другим идентификатором с одним и тем же временем, я не хочу, чтобы вычислили среднее значение секунды, но вычислили два разных значения для разных идентификаторов.
Я пытался использовать функцию groupby при повторной выборке, но у меня было странное поведение:
data =dataM.groupby('uid').resample('15min').mean().dropna()
, таким образом, исходные данные:
2019-12-17 02:04:30 273 Z8RsBpxhnkebK5fvahVCmfV7icO2 wake 30
2019-12-17 02:05:00 274 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 5010
2019-12-17 03:28:30 275 Z8RsBpxhnkebK5fvahVCmfV7icO2 deep 270
2019-12-17 03:33:00 276 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 30
2019-12-17 03:33:30 277 Z8RsBpxhnkebK5fvahVCmfV7icO2 deep 360
2019-12-17 03:39:30 278 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 30
2019-12-17 03:40:00 279 Z8RsBpxhnkebK5fvahVCmfV7icO2 wake 450
2019-12-17 03:47:30 280 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 5700
правильно сгруппированы, но среднее значение очень странное, на самом деле вывод:
2019-12-17 02:00:00 273.5 2520.0
2019-12-17 03:15:00 275.0 270.0
2019-12-17 03:30:00 277.5 217.5
2019-12-17 03:45:00 280.0 5700.0
верно для 02:00:00, но я действительно не понимаю, зачем создавать новое значение 03:15:00
потому что для меня это данные:
2019-12-17 03:28:30 275 Z8RsBpxhnkebK5fvahVCmfV7icO2 deep 270
2019-12-17 03:33:00 276 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 30
2019-12-17 03:33:30 277 Z8RsBpxhnkebK5fvahVCmfV7icO2 deep 360
Должно быть:
2019-12-17 03:30:00 277.5 220
Поскольку три значения довольно близки к 3:30, вместо создания нового в 3:15 (потому что слишком много уважения 3:30).
Спасибо,