[python] groupby 개체를 인쇄하는 방법

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

‘A’로 그룹화 한 후 인쇄 할 때 다음이 있습니다.

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



답변

간단하게 :

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.items():
    if key in key_list_from_gb:
        print(df.ix[values], "\n")


답변

단순히 표시하는 방법을 찾고 있다면 describe ()를 사용할 수 있습니다.

grp = df.groupby['colName']
grp.describe()

이것은 당신에게 깔끔한 테이블을 제공합니다.


답변

head()버전 0.12와 0.13 사이 의 변경 동작을 확인했습니다 . 저에게는 버그처럼 보입니다. 문제를 만들었습니다 .

그러나 groupby 작업은 실제로 그룹별로 정렬 된 DataFrame을 반환하지 않습니다. 이 .head()방법은 여기서 약간 오해의 소지가 있습니다 df. 그룹화 한 객체 (이 경우 )를 다시 검사 할 수있는 편리한 기능 입니다. 의 결과 groupby는 별도의 개체 인 GroupBy개체입니다. 당신이해야합니다 apply, transform또는filter DataFrame 또는 시리즈로 다시 얻을 수 있습니다.

A 열의 값을 기준으로 정렬하려는 경우를 사용해야합니다 df.sort('A').


답변

또 다른 간단한 대안 :

for name_of_the_group, group in grouped_dataframe:
   print (name_of_the_group)
   print (group)


답변

또한 다른 간단한 대안은 다음과 같습니다.

gb = df.groupby("A")
gb.count() # or,
gb.get_group(your_key)


답변

이전 답변 외에도 :

예를 들어,

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})

그런 다음 간단한 한 줄 코드

df.groupby('A').apply(print)


답변

좋은 통찰력을 주신 Surya에게 감사드립니다. 나는 그의 솔루션을 정리하고 단순히 다음을 수행합니다.

for key, value in df.groupby('A'):
    print(key, value)