GOOGLE ADS

среда, 11 мая 2022 г.

Выбирать предыдущую строку каждый час в пандах

Я пытаюсь получить ближайшую предыдущую точку данных каждый час в кадре данных pandas. Например:

time value
0 14:59:58 15
1 15:00:10 20
2 15:57:42 14
3 16:00:30 9

вернется

time value
0 15:00:00 15
1 16:00:00 14

т.е. строки 0 и 2 исходного фрейма данных. Как мне это сделать? Спасибо!


Решение проблемы

Со следующим игрушечным фреймом данных:

import pandas as pd
df = pd.DataFrame(
{"time": ["14:59:58", "15:00:10", "15:57:42", "16:00:30"], "value": [15, 20, 14, 9]}
)

Вот один из способов сделать это:

# Setup
df["time"] = pd.to_datetime(df["time"], format="%H:%M:%S")
temp_df = pd.DataFrame(df["time"].dt.round("H").drop_duplicates()).assign(value=pd.NA)
# Add round hours to df, find nearest data points and drop previous hours
new_df = (
pd.concat([df, temp_df])
.sort_values(by="time")
.fillna(method="ffill")
.pipe(lambda df_: df_[~df_["time"].isin(df["time"])])
.reset_index(drop=True)
)
# Cleanup
new_df["time"] = new_df["time"].dt.time
print(new_df)
# Output
time value
0 15:00:00 15
1 16:00:00 14

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...