Как напечатать объект groupby
Я хочу напечатать результат группировки с помощью Pandas.
У меня есть dataframe:
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
При печати после группировки "A" у меня есть следующее:
print df.groupby('A')
<pandas.core.groupby.DataFrameGroupBy object at 0x05416E90>
Как я могу напечатать группу данных?
Если я это сделаю:
print df.groupby('A').head()
Я получаю dataframe, как если бы он не был сгруппирован:
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
Ответы
Ответ 1
Просто выполните:
grouped_df = df.groupby('A')
for key, item in grouped_df:
print grouped_df.get_group(key), "\n\n"
Это также работает,
grouped_df = df.groupby('A')
gb = grouped_df.groups
for key, values in gb.iteritems():
print df.ix[values], "\n\n"
Для выборочной группировки клавиш: Вставьте нужные ключи внутри key_list_from_gb, следуя ниже, используя gb.keys(): например,
gb = grouped_df.groups
gb.keys()
key_list_from_gb = [key1, key2, key3]
for key, values in gb.iteritems():
if key in key_list_from_gb:
print df.ix[values], "\n"
Ответ 2
Если вы просто ищете способ его отображения, вы можете использовать describe():
grp = df.groupby['colName']
grp.describe()
Это дает вам аккуратную таблицу.
Ответ 3
Кроме того, другая простая альтернатива может быть:
gb = df.groupby("A")
gb.count() # or,
gb.get_group(your_key)
Ответ 4
Я подтвердил, что поведение head()
изменяется между версиями 0.12 и 0.13. Это похоже на ошибку. Я создал issue.
Но операция groupby фактически не возвращает DataFrame, отсортированную по группе. Метод .head()
здесь немного вводит в заблуждение - это просто удобная функция, позволяющая вам пересмотреть объект (в данном случае df
), который вы сгруппировали. Результатом groupby
является отдельный объект, объект groupby
. Вы должны apply
, transform
или filter
вернуться в DataFrame или Series.
Если все, что вы хотели сделать, было сортировка по значениям в столбцах A, вы должны использовать df.sort('A')
.