Я создал таблицу, которая показывает значения режима моего набора данных. Набор данных изначально был сгруппирован по «дате», «часу» и «комнате», чтобы получить значение режима пешеходного движения. GroupBy проводили следующим образом:Получение максимального режима для каждой группы с помощью groupby
dataframe = df.groupby([df['date'], df['hour'], df['room']])
Затем я генерируется значение режима (ов) для «трафика» каждой группы следующим образом:
dataframe = dataframe['traffic'].apply(lambda x: x.mode())
В результате у меня dataframe, который отображает соответствующие группы и показывает модальное значение для комнаты, в час и в день. Моя проблема заключается в том, что в некоторых случаях число модальных значений более чем один (как 2 или 3 значения имели одинаковое количество наблюдений)
Ток dataframe выглядит следующим образом:
mode
date hour room
6 12 room1 0 15
room2 0 23
1 26
room3 0 1
1 2
13 room2 0 9
1 11
room2 0 15
As вы можете увидеть выше, для комнаты 2 в 12:00 6 января, есть 2 модальных значения (23 и 26).
Моя проблема заключается в том, что в идеале я бы сбросил наименьшее значение «режима» из каждой группы, где есть более одного наблюдения.
Я рассмотрел несколько подходов, но не могу заставить это функционировать. я думал, что следующий будет работать:
dataframe.apply(lambda x: x[dataframe['mode'] == dataframe['mode'].max()])
Я бы тогда удалить дубликаты, но это не влияет на dataframe ..
или
dataframe.filter(lambda x : x[dataframe['mode'] == dataframe['mode'].max()], dataframe['mode'])
, который дает мне «» функция «объект не повторяется» ошибка
или
for elem in range(0, dataframe.size -1): #to iterate over the daaframe rows
if elem != dataframe['mode'].max(): #to identify rows that aren't max mode value
dataframe = dataframe.drop([elem]) #to drop these rows
Чтобы ответить на запрос от Conner, пожалуйста, смотрите ниже исходных данных в формате CSV (dataframe под названием «ДФ»):
room time capacity areaName hour date traffic
0 room1 Mon Nov 02 09:00:00 40 area01 9 2 14
1 room1 Mon Nov 02 09:05:00 40 area01 9 2 15
2 room1 Mon Nov 02 09:10:00 80 area01 9 2 23
3 room1 Mon Nov 02 09:15:00 80 area01 9 2 23
...
14 room2 Mon Nov 02 11:00:00 40 area03 11 2 67
15 room2 Mon Nov 02 11:50:00 80 area03 11 2 64
16 room2 Mon Nov 02 11:10:00 40 area03 11 2 72
Если кто-нибудь знает способ, чтобы пройти через каждую группу и только сохранить максимальное значение режима, если я несколько ценю.
Благодарим вас за внимание!
-Romain
спасибо за ваш ответ. Я попробовал код, который вы предложили, но я столкнулся с следующей ошибкой: «AttributeError: не удается получить доступ к атрибуту атрибута« объектов »объектов« SeriesGroupBy », попробуйте использовать метод« apply ». – RomainD
@RomainD Можете ли вы предоставить образец своих данных в csv или json (что-то легко загружать)? Всего несколько строк. –
Извините за задержку, теперь я добавил образец исходных данных. Как вы можете видеть, я удалил некоторые из менее необходимых функций в моем «dataframe» – RomainD