Очистка ошибочной накопительной суммы с помощью PandasPython

Программы на Python
Anonymous
Очистка ошибочной накопительной суммы с помощью Pandas

Сообщение Anonymous »

Я пытаюсь эффективно очистить временной ряд Pandas, содержащий ежедневную совокупную сумму осадков. Иногда несколько последовательных значений ниже предыдущего значения. Я пытаюсь заменить эти значения последним правильным значением.
Обратите внимание, что временной ряд содержит несколько дней, поэтому совокупная сумма сбрасывается для первой временной метки каждого дня.Я придумал следующее решение, которое работает, но крайне неэффективно:

Код: Выделить всё

def cleanup_RR_TODAY(df: pd.DataFrame) -> pd.Series:
"""
Cleanup the RR_TODAY measure by setting the value to max day value if the value is less than that
:param df: The DataFrame to cleanup
:return: The cleaned up DataFrame
"""
max_value = np.nan
clean_series = pd.Series(dtype="float64")
for index, value in df.iterrows():
if (
np.isnan(max_value)
or value["day_change"]
or (not np.isnan(value["RR_TODAY"]) and value["RR_TODAY"] > max_value)
):
max_value = value["RR_TODAY"]
clean_series[index] = max_value
elif value["RR_TODAY"] < max_value:
clean_series[index] = max_value
else:
clean_series[index] = value["RR_TODAY"]
return clean_series

df["day"] = df.index.tz_convert(station.timezone).floor("D")
df["day_change"] = df["day"] != df["day"].shift(periods=1)
df["RR_TODAY"] = cleanup_RR_TODAY(df)
Я рассматриваю векторизованное решение, которое будет работать намного быстрее


Подробнее здесь: https://stackoverflow.com/questions/790 ... ith-pandas

Вернуться в «Python»