Как ускорить подсчет среднего значения уникальных значений по секундно?
Есть датафрейм один его столбец содержит дату и время. Нужно посекундно рассчитать среднее значение встречающихся значений. Для этого написал следующий скрипт:
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 на каждую секунду. При этом на каждую минуту каждого часа должно быть отдельное значение.