#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