Как ускорить подсчет среднего значения уникальных значений по секундно?

Есть датафрейм один его столбец содержит дату и время. Нужно посекундно рассчитать среднее значение встречающихся значений. Для этого написал следующий скрипт:

   def speed_request(self, dataframe: pd.DataFrame):
        print('start_speed')
        dataframe['time_local'] = pd.to_datetime(dataframe['time_local'])
        month_list = dataframe['time_local'].dt.month.unique()
        if self.speed_dict is None:
            self.speed_dict = {}
        for month in month_list:
            day_list = dataframe.loc[dataframe['time_local'].dt.month == month]['time_local'].dt.day.unique()
            for day in day_list:
                hour_list = dataframe.loc[dataframe['time_local'].dt.day == day]['time_local'].dt.hour.unique()
            for hour in hour_list:
                minute_list = dataframe.loc[dataframe['time_local'].dt.hour == hour][
                    'time_local'].dt.minute.unique()
                for minute in minute_list:
                    second_list = dataframe.loc[dataframe['time_local'].dt.minute == minute][
                        'time_local'].dt.second.unique()
                    print(second_list)
                    for second in second_list:

                        time_df = dataframe.loc[(dataframe['time_local'].dt.month == month)
                                                & (dataframe['time_local'].dt.day == day)
                                                & (dataframe['time_local'].dt.hour == hour)
                                                & (dataframe['time_local'].dt.minute == minute)
                                                & (dataframe['time_local'].dt.second == second)]
                        # print(time_df.head())
                        users_dict = {}
                        mean_speed_request = []
                        users = time_df['remote_addr'].value_counts()
                        for user in users.keys():
                            users_dict[user] = users[user]
                            mean_speed_request.append(users[user])

                        self.users_dict = users_dict

                        
                        if '{}:{}:{}'.format(hour, minute, second) not in self.speed_dict.keys():
                            self.speed_dict['{}:{}:{}'.format(hour, minute, second)] = [np.mean(mean_speed_request), users_dict]
                        else:
                            self.speed_dict['{}:{}:{}'.format(hour, minute, second)] = [(np.mean(mean_speed_request)
                                                                                   + self.speed_dict['{}:{}:{}'.format(hour,
                                                                                                     minute, second)][0]/ 2),
                                                                                        users_dict]

Но он работает слишком долго. На датафрейме из 200000 строчек около 500 секунд. Есть ли в pandas какой нибудь метод, который позволит не использовать столько вложенных циклов и будет работать быстрее.

Дополнение

Пример данных

time_local        ip
22-06-01 11:2:1   123.123.123.22
22-06-01 11:2:1   123.123.123.22
22-06-01 11:2:1   123.123.123.22
22-06-01 11:2:1   123.123.123.23
22-06-01 11:2:1   123.123.123.22  
22-06-01 11:2:2   123.123.123.22

Нужно посчитать сколько среднее значение строчек для каждого ip на каждую секунду. При этом на каждую минуту каждого часа должно быть отдельное значение.


Ответы (0 шт):