Как использовать объекты python pandas groupby или .DataFrameGroupBy для создания уникального списка комбинаций

Есть ли более эффективный способ использования объекта pandas groupby или pandas.core.groupby.DataFrameGroupBy для создания уникального списка, серии или фрейма данных, где мне нужны уникальные комбинации 2 из N столбцов. Например, если у меня есть столбцы: Дата, Имя, Приобретенный предмет, и я просто хочу узнать уникальную комбинацию имени и даты, это отлично работает:

y = x.groupby(['Date','Name']).count()
y = y.reset_index()[['Date', 'Name']]

но я чувствую, что должен быть более чистый способ использования

y = x.groupby(['Date','Name'])

но y.index выдает ошибку, хотя y.keys работает. Это на самом деле заставляет меня задать общий вопрос: для чего удобны объекты pandas.core.groupby.DataFrameGroupBy?

Спасибо!


person arosner09    schedule 27.08.2014    source источник
comment
Что вам нужно, чего y.keys не дает?   -  person BrenBarn    schedule 27.08.2014
comment
y.index выдает ошибку, можете показать ошибку? в идеале с примером DataFrame, который это демонстрирует.   -  person Andy Hayden    schedule 27.08.2014


Ответы (1)


Вам не нужно использовать — и фактически не следует использовать — groupby здесь. Вместо этого вы можете использовать drop_duplicates для получения уникальных строк:

x.drop_duplicates(['Date','Name'])

Демо:

In [156]: x = pd.DataFrame({'Date':[0,1,2]*2, 'Name':list('ABC')*2})

In [158]: x
Out[158]: 
   Date Name
0     0    A
1     1    B
2     2    C
3     0    A
4     1    B
5     2    C

In [160]: x.drop_duplicates(['Date','Name'])
Out[160]: 
   Date Name
0     0    A
1     1    B
2     2    C

Вы не должны использовать groupby, потому что

  1. x.groupby(['Date','Name']).count() выполняет подсчет количества элементов в каждой группе, но подсчет не используется — это бесполезное вычисление.
  2. x.groupby(['Date','Name']).count() вызывает AttributeError, если x имеет только столбцы Date и Name.
  3. drop_duplicates намного быстрее для этой цели.

Используйте groupby, если вы хотите выполнить какую-либо операцию над каждой группой, например подсчет количества элементов в каждой группе или вычисление некоторой статистики (например, суммы или среднего значения и т. д.) для каждой группы.

person unutbu    schedule 27.08.2014