#python #pandas
#python #pandas
Вопрос:
Это медленное решение для того, чего я надеюсь достичь. Проблема в производительности. Есть ли более «пандонический» способ добиться этого без определяемой пользователем функции? Цель состоит в том, чтобы сохранить только все строки, имеющие первую временную метку, которая встречается в каждой группе.
def get_first_id_time(df):
first_time = df['datetime'][0]
df = df.loc[df['datetime']==first_time]
return df
data = data.groupby('id').apply(get_first_id_time)
РЕДАКТИРОВАТЬ: обратите внимание, для каждой группы есть много строк с datetime=first_time .
Комментарии:
1. используйте
drop_duplicate(keep=first)
2. В этом случае вы могли бы выполнить сортировку по
id
иdatetime
, а затемdrop_duplicates
id
с помощью параметраkeep='first'
3. Похоже, вам просто нужно
data.groupby('id').head(1)
4. Возможно, это недостаточно ясно — есть много строк, которые равны «first_time». Таким образом, сохранение только первой строки не работает.
5. Тогда это
transform
маска с логическим рядом:data[data.groupby('id').datetime.transform(min) == data.datetime]
. Где-то есть дублирование
Ответ №1:
Можете ли вы просто получить min
дату и время и merge
?
min_datetime = data.groupby('id')['datetime'].min().reset_index()
data = data.merge(min_datetime, how='inner', on='id')
Редактировать:
Поскольку существует много строк, которые имеют одинаковое first_datetime
значение, только merge
для обоих datetime
и id
.