Python2.7 - группа фреймов данных Pandas по двум критериям

Допустим, у меня есть панад DataFrame:

import pandas as pd

df = pd.DataFrame(columns=['name','time'])
df = df.append({'name':'Waren', 'time': '20:15'}, ignore_index=True)
df = df.append({'name':'Waren', 'time': '20:12'}, ignore_index=True)
df = df.append({'name':'Waren', 'time': '20:11'}, ignore_index=True)
df = df.append({'name':'Waren', 'time': '01:29'}, ignore_index=True)
df = df.append({'name':'Waren', 'time': '02:15'}, ignore_index=True)
df = df.append({'name':'Waren', 'time': '02:16'}, ignore_index=True)

df = df.append({'name':'Kim', 'time': '20:11'}, ignore_index=True)
df = df.append({'name':'Kim', 'time': '01:29'}, ignore_index=True)
df = df.append({'name':'Kim', 'time': '02:15'}, ignore_index=True)
df = df.append({'name':'Kim', 'time': '01:49'}, ignore_index=True)
df = df.append({'name':'Kim', 'time': '01:49'}, ignore_index=True)
df = df.append({'name':'Kim', 'time': '02:15'}, ignore_index=True)
df = df.append({'name':'Mary', 'time': '22:15'}, ignore_index=True)
df = df.drop(df.index[2])
df = df.drop(df.index[7])

Я хотел бы сгруппировать этот кадр по name, а во-вторых, по непрерывным индексам (Группировать по непрерывные индексы в Pandas DataFrame).

Желаемый результат будет такой группировкой:

Желаемый результат

Таким образом, строки сгруппированы по name, и для строки с непрерывным увеличением индексов берется только первый и последний элемент.

Я пробовал так: df.groupby(['name']).groupby(df.index.to_series().diff().ne(1).cumsum()).group, что вызывает только ошибку: AttributeError: Cannot access callable attribute 'groupby' of 'DataFrameGroupBy' objects, try using the 'apply' method

Любая помощь приветствуется!


person Sean M.    schedule 04.04.2019    source источник


Ответы (1)


Ты делаешь это неправильно. Когда вы выполняете df.groupby (['name']), он возвращает атрибут groupby, который нельзя вызвать. Вам нужно применить их вместе.


df.groupby(['name', df.index.to_series().diff().ne(1).cumsum()]).groups

Out: 
{('Kim', 2): [6, 7],
 ('Kim', 3): [9, 10, 11],
 ('Mary', 3): [12],
 ('Waren', 1): [0, 1],
 ('Waren', 2): [3, 4, 5]}
person Umesh    schedule 04.04.2019