Я хочу распечатать результат группировки с помощью Pandas.
У меня есть фреймворк:
import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})
print(df)
A B
0 one 0
1 one 1
2 two 2
3 three 3
4 three 4
5 one 5
При печати после группировки по букве «А» у меня есть следующее:
print(df.groupby('A'))
<pandas.core.groupby.DataFrameGroupBy object at 0x05416E90>
Как распечатать сгруппированный фрейм данных?
Если я сделаю:
print(df.groupby('A').head())
Я получаю фрейм данных, как если бы он не был сгруппирован:
A B
A
one 0 one 0
1 one 1
two 2 two 2
three 3 three 3
4 three 4
one 5 one 5
Я ожидал чего-то вроде:
A B
A
one 0 one 0
1 one 1
5 one 5
two 2 two 2
three 3 three 3
4 three 4
print df.groupby('A').head()
. какая у вас версия панд?df.groupby(['A', 'B']).sum()
, если('A', 'B')
пары не уникальны.Ответы:
Просто сделайте:
Это тоже работает,
Для выборочной группировки клавиш: вставьте нужные клавиши внутрь
key_list_from_gb
, как показано ниже, используяgb.keys()
: Например,источник
for A in d['A'].unique(): print(A, df.query(f'A == "{A}"'))
key_list_from_gb
?Если вы просто ищете способ отобразить это, вы можете использовать description ():
Это дает вам аккуратный стол.
источник
Я подтвердил, что поведение
head()
изменений между версиями 0.12 и 0.13. Мне это кажется ошибкой. Я создал проблему .Но операция groupby на самом деле не возвращает DataFrame, отсортированный по группе. Этот
.head()
метод здесь немного вводит в заблуждение - это просто удобная функция, позволяющая повторно изучить объект (в данном случаеdf
), который вы сгруппировали. Результатомgroupby
является отдельный вид объекта,GroupBy
объект. Вы должныapply
,transform
или,filter
чтобы вернуться к DataFrame или Series.Если все, что вы хотели сделать, это отсортировать по значениям в столбце A, вам следует использовать
df.sort('A')
.источник
head
на самом деле он делаетhead(5)
то, что показывает первые 5 строк, более правильным является «показать» фреймdf.groupby('A').apply(lambda x: x)
, который, по сути, является Passthru. Я полагаю, у вас может бытьpass()
метод.Еще одна простая альтернатива:
источник
Также другой простой альтернативой может быть:
источник
В дополнение к предыдущим ответам:
Взяв ваш пример,
Затем простой однострочный код
источник
Спасибо Сурье за хорошие идеи. Я бы очистил его решение и просто сделал:
источник
Список вызовов () объекта GroupBy
дает тебе:
источник
вы не можете увидеть данные groupBy непосредственно с помощью оператора печати, но вы можете увидеть, перебирая группу с помощью цикла for, попробуйте этот код, чтобы увидеть группу по данным
вы получите результат после того, как попробуете это как результат группы
Я надеюсь, что это помогает
источник
В Jupyter Notebook, если вы сделаете следующее, он распечатает красивую сгруппированную версию объекта.
apply
Метод помогает в создании мультииндексных dataframe.Вывод:
Если вы хотите, чтобы
by
столбцы не отображались в выводе, просто отбросьте столбцы, например.Вывод:
Здесь я не уверен, почему
.iloc[:]
не работает, а[:]
не в конце. Так что, если в будущем возникнут какие-то проблемы из-за обновлений (или в настоящее время),.iloc[:len(a)]
тоже работает.источник
Я нашел хитрый способ, просто для мозгового штурма, посмотрите код:
выход:
Плюсы так легко распечатать, поскольку он возвращает фрейм данных вместо объекта Groupby. И результат выглядит неплохо. Минус в том, что он создает серию избыточных данных.
источник
В Python 3
Более интерактивным способом
источник
df.groupby ('ключ, по которому вы хотите сгруппировать'). apply (печать)
Как упомянул другой участник, это самое легкое и простое решение для визуализации объекта groupby.
источник
чтобы напечатать все (или произвольно много) строк сгруппированного df:
источник