Получение всех столбцов фрейма данных после использования метода ‘groupby’

#python-3.x #pandas #pandas-groupby

#python-3.x #панды #панды-группби

Вопрос:

Не удалось получить все столбцы фрейма данных после применения метода groupby из Pandas

У меня есть образец фрейма данных, как показано ниже.

   col1 col2        day col4
0   a1   b1     monday   c1
1   a2   b2    tuesday   c2
2   a3   b3  wednesday   c3
3   a1   b1     monday   c5
 

Здесь ‘a1 b1 понедельник’ повторяются дважды. Итак, после groupby вывод должен быть:

 col1    col2          day     col4  count
a1        b1       monday      c1     2
a2        b2      tuesday      c2     1
a3        b3    wednesday      c3     1
 

Я попытался использовать df.groupby(['col1','day'],sort=False).size().reset_index(name='Count')

и

 df.groupby(['col1','day']).transform('count')
 

и вывод всегда

 col1    day         count
a1  monday        2
a2  tuesday       1
a3  wednesday     1
 

где, поскольку мои исходные данные содержат 14 столбцов, и нет смысла сохранять все имена столбцов в инструкции groupby. Есть ли лучший pythonic способ добиться этого??

Комментарии:

1. df.groupby(['col1', 'day'])['col4'].agg(['first', 'count']).reset_index()

2. Как я уже упоминал, в real data всего 14 столбцов с большими строками в качестве имен столбцов, поэтому не самый приятный способ сохранить все 14 имен столбцов в операторе groupby

Ответ №1:

Сначала groupby transform создайте свой count столбец.

Затем используйте drop_duplicates для удаления повторяющихся строк:

 df['count'] = df.groupby(['col1','day'],sort=False)['col1'].transform('size')
df.drop_duplicates(['col1', 'day'], inplace=True)

print(df)
  col1 col2        day col4  count
0   a1   b1     monday   c1      2
1   a2   b2    tuesday   c2      1
2   a3   b3  wednesday   c3      1
 

Комментарии:

1. уже пробовал drop_duplicates тоже (забыл упомянуть в посте). Я ищу, чтобы получить все столбцы вместе с количеством вхождений в столбцы «день»

2. Отредактированный ответ @Kumar-58

3. Отлично, не забудьте принять в качестве ответа, если это помогло вам 🙂 @Kumar-58