2015-01-29 3 views
1

У меня есть dataframe df, который выглядит следующим образом:Колонка операции на панд GroupBy объект

 id Category Time 
1 176  12  00:00:00 
2 4956  2  00:00:00 
3 583  4  00:00:04 
4 9395  2  00:00:24 
5 176  12  00:03:23 

, которая в основном набор id и category пункта они использовали при определенной Time. Я использую df.groupby['id'], а затем я хочу посмотреть, используют ли они ту же категорию или другую и соответственно назначают True или False (или NaN, если это был первый элемент для этого id. Я также отфильтровал данные, чтобы удалить все id с только один Time.

к примеру, одна из групп может выглядеть

 id Category Time 
1 176  12  00:00:00 
2 176  12  00:03:23 
3 176  2  00:04:34 
4 176  2  00:04:54 
5 176  2  00:05:23 

, и я хочу, чтобы выполнить операцию, чтобы получить

 id Category Time   Transition 
1 176  12  00:00:00  NaN 
2 176  12  00:03:23  False 
3 176  2  00:04:34  True 
4 176  2  00:04:54  False 
5 176  2  00:05:23  False 

Я подумал о том, как делать apply в столбце Category после groupby, но у меня возникли проблемы с поиском правильной функции.

ответ

0

Вам не нужно groupby здесь, вам просто нужно sort и shift.

df.sort(['id', 'Time'], inplace=True) 
df['Transition'] = df.Category != df.Category.shift(1) 
df.loc[df.id != df.id.shift(1), 'Transition'] = np.nan 

я не проверял это, но он должен сделать трюк

+1

, кажется, сработало и было легче, чем я ожидал. Благодаря! – Bilentor

Смежные вопросы