source

그룹별 오브젝트 인쇄 방법

goodcode 2022. 9. 22. 00:22
반응형

그룹별 오브젝트 인쇄 방법

팬더와 그룹화한 결과를 인쇄하고 싶습니다.

데이터 프레임이 있습니다.

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")

폐지 통지:ix0.20.0에서 폐지되었습니다.

이것 또한 효과가 있다.

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")

단순히 표시하는 방법을 찾는 경우 descript()를 사용할 수 있습니다.

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

이렇게 하면 테이블이 깔끔해집니다.

이전 답변과 더불어:

예를 들면,

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

그럼 간단한 1라인 코드

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

주피터 노트applymethod는 멀티인덱스 데이터 프레임을 작성하는 데 도움이 됩니다.

by = 'A'  # groupby 'by' argument
df.groupby(by).apply(lambda a: a[:])

출력:

             A  B
A                
one   0    one  0
      1    one  1
      5    one  5
three 3  three  3
      4  three  4
two   2    two  2

「 」를 by출력에 표시되지 않도록 하려면 다음과 같이 열을 드롭하십시오.

df.groupby(by).apply(lambda a: a.drop(by, axis=1)[:])

출력:

         B
A         
one   0  0
      1  1
      5  5
three 3  3
      4  4
two   2  2

왜 그런지 잘 ..iloc[:]하지 않다[:]으로 또는 현재)로 인해 , 다음 중 어떤 가 발생할 수 있습니다..iloc[:len(a)]작합니니다다

의 행동을 확인되었습니다.head()버전 0.12와 0.13 사이의 변경.그것은 나에게 벌레처럼 보인다.가 이슈를 만들었다.

그러나 그룹별 작업은 실제로 그룹별로 정렬된 데이터 프레임을 반환하지 않습니다..head()의 소지가 있습니다는 method를 할 수 이 경우 method는 method를 사용합니다.이것은 오브젝트를 재검사할 수 있는 편리한 기능입니다(이 경우,df를 참조해 주세요을 사용하다groupby, 즉 사물의 종류, 즉 사물의 종류, 사물의 종류입니다.GroupByyou . 신신 must must must must must must must must must must must must.apply,transform , 「」filter데이터 프레임 「시리즈」를 선택합니다.

이라면 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.groupby('A').apply(display)

깔끔한 포맷을 제공하다

df.groupby('key you want to group by').apply(print)

다른 멤버가 언급했듯이 이것은 그룹별 객체를 시각화하는 가장 쉽고 간단한 솔루션입니다.

좋은 통찰력을 가진 Surya에게 감사한다.나는 그의 해결책을 정리하고 간단히 할 것이다:

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

GroupBy 오브젝트의 콜리스트()

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

다음과 같은 기능을 제공합니다.

[('one',      A  B
0  one  0
1  one  1
5  one  5), ('three',        A  B
3  three  3
4  three  4), ('two',      A  B
2  two  2)]

groupBy 데이터는 인쇄문으로 직접 볼 수 없지만 for loop을 사용하여 그룹 전체에 반복하여 볼 수 있습니다.데이터별로 그룹을 보려면 이 코드를 사용하세요.

group = df.groupby('A') #group variable contains groupby data
for A,A_df in group: # A is your column and A_df is group of one kind at a time
  print(A)
  print(A_df)

이것을 그룹별 결과로서 시행한 후에 출력을 얻을 수 있습니다.

도움이 되었으면 좋겠다

이것이 더 나은 범용 답변입니다.이 기능은 모든 그룹 이름과 값을 인쇄하거나 선택적으로 표시할 그룹을 하나 이상 선택합니다.

def print_pd_groupby(X, grp=None):
    '''Display contents of a Panda groupby object
    :param X: Pandas groupby object
    :param grp: a list with one or more group names
    '''
    if grp is None:
        for k,i in X:
            print("group:", k)
            print(i)
    else:
        for j in grp:
            print("group:", j)
            print(X.get_group(j))

이 예에서 세션 출력은 다음과 같습니다.

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

In [117]: dfg = df.groupby('A')

In [118]: print_pd_groupby(dfg)
group: one
     A  B
0  one  0
1  one  1
5  one  5
group: three
       A  B
3  three  3
4  three  4
group: two
     A  B
2  two  2

In [119]: print_pd_groupby(dfg, grp = ["one", "two"])
group: one
     A  B
0  one  0
1  one  1
5  one  5
group: two
     A  B
2  two  2

함수는 재사용 가능한 콘텐츠이므로 패키지 또는 함수 컬렉션에 포함시키고 다시는 "스크립트" 접근 방식을 다시 작성하지 않기 때문에 이것이 더 나은 답변입니다.

IMHO, 이런 건 판다 그룹비의 기본 제공 방식일 거예요.

까다로운 방법을 찾았어요. 브레인스토밍을 위해서요. 코드를 보세요.

df['a'] = df['A']  # create a shadow column for MultiIndexing
df.sort_values('A', inplace=True)
df.set_index(["A","a"], inplace=True)
print(df)

출력:

             B
A     a
one   one    0
      one    1
      one    5
three three  3
      three  4
two   two    2

프로는 Groupby Object 대신 데이터 프레임을 반환하기 때문에 인쇄가 매우 쉽습니다.그리고 출력은 좋아 보입니다.단, 일련의 용장 데이터가 생성됩니다.

python 3의 경우

k = None
for name_of_the_group, group in dict(df_group):
    if(k != name_of_the_group):
        print ('\n', name_of_the_group)
        print('..........','\n')
    print (group)
    k = name_of_the_group

보다 인터랙티브한 방법으로

DataFrameGroupBy 객체를 목록으로 변환하기만 하면 됩니다.ls_syslog_df = list(df.groupby('A')) print(ls_syslog_df)

get_group() 메서드를 사용합니다.

new_group = df.groupby(['A'])
get_group('')

메서드에 가져올 그룹의 이름을 입력합니다.

그룹화된 df의 모든 라인(또는 임의로 많은 라인)을 인쇄하려면:

import pandas as pd
pd.set_option('display.max_rows', 500)

grouped_df = df.group(['var1', 'var2'])
print(grouped_df)

언급URL : https://stackoverflow.com/questions/22691010/how-to-print-a-groupby-object

반응형