Ускорение цикла по фреймам данных - PullRequest
0 голосов
/ 29 мая 2018

Я написал код, указанный ниже.Существует два кадра данных Pandas: df содержит столбцы timestamp_milli и pressure, а df2 содержит столбцы timestamp_milli и acceleration_z.Оба кадра данных имеют около 100 000 строк.В приведенном ниже коде я ищу каждую временную метку каждой строки df строк df2, где разница во времени находится в пределах диапазона и минимальна.

К сожалению, код крайне медленный.Кроме того, я получаю следующее сообщение, исходящее из строки df_temp["timestamp_milli"] = df_temp["timestamp_milli"] - row["timestamp_milli"]:

SettingWithCopyWarning: пытается установить значение для копии фрагмента из DataFrame.Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = значение

Как ускорить код и устранить предупреждение?

acceleration = []
pressure = []

for index, row in df.iterrows():
    mask = (df2["timestamp_milli"] >= (row["timestamp_milli"] - 5)) & (df2["timestamp_milli"] <= (row["timestamp_milli"] + 5))
    df_temp = df2[mask]

    # Select closest point
    if len(df_temp) > 0:
        df_temp["timestamp_milli"] = df_temp["timestamp_milli"] - row["timestamp_milli"]
        df_temp["timestamp_milli"] = df_temp["timestamp_milli"].abs()

        df_temp = df_temp.loc[df_temp["timestamp_milli"] == df_temp["timestamp_milli"].min()]

        for index2, row2 in df_temp.iterrows():
            pressure.append(row["pressure"])
            acc = row2["acceleration_z"]
            acceleration.append(acc)

1 Ответ

0 голосов
/ 29 мая 2018

Я сталкивался с подобной проблемой, использование iteruples вместо iterrows показывает значительное сокращение времени. почему у iterrows проблемы. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...