Python2.7 - группа данных Pandas по двум критериям - PullRequest
0 голосов
/ 04 апреля 2019

Допустим, у меня есть панадас 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 ).

Желаемый результат будет выглядеть следующим образом:

Desired Output

Таким образом, строки сгруппированы по 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

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

1 Ответ

1 голос
/ 04 апреля 2019

Вы делаете это неправильно. Когда вы делаете 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]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...