그룹화된 Panda 데이터 프레임을 어떻게 루프합니까?
데이터 프레임:
  c_os_family_ss c_os_major_is l_customer_id_i
0      Windows 7                         90418
1      Windows 7                         90418
2      Windows 7                         90418
 
코드:
print df
for name, group in df.groupby('l_customer_id_i').agg(lambda x: ','.join(x)):
    print name
    print group
 
집계된 데이터를 루프하려고 하면 다음과 같은 오류가 나타납니다.
ValueError: 값이 너무 많아 압축을 풀 수 없습니다.
@EdChum, 예상되는 출력은 다음과 같습니다.
                                                    c_os_family_ss  \
l_customer_id_i
131572           Windows 7,Windows 7,Windows 7,Windows 7,Window...
135467           Windows 7,Windows 7,Windows 7,Windows 7,Window...
                                                     c_os_major_is
l_customer_id_i
131572           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...
135467           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...
 
출력은 문제가 되지 않습니다.모든 그룹을 루프하고 싶습니다.
df.groupby('l_customer_id_i').agg(lambda x: ','.join(x))는 이미 데이터 프레임을 반환하고 있기 때문에 그룹을 루프 오버할 수 없게 됩니다.
일반적으로:
df.groupby(...)a를 반환하다GroupBy오브젝트(DataFrameGroupBy 또는 SeriesGroupBy)를 사용하여 그룹을 반복할 수 있습니다(여기 매뉴얼 참조).다음과 같은 작업을 수행할 수 있습니다.grouped = df.groupby('A') for name, group in grouped: ...그룹바이에 함수를 적용하는 경우, 이 예에서는
df.groupby(...).agg(...)(단, 이것은transform,apply,mean, ...), 함수를 다른 그룹에 적용한 결과를 하나의 데이터 프레임에 결합합니다(groupby의 'groupby' 패러다임의 적용과 결합 단계).따라서 이 결과는 항상 다시 DataFrame(또는 적용된 기능에 따라서는 Series)이 됩니다.
다음에 나타내는 것은, 에 대해서 반복하는 예입니다.pd.DataFrame열별로 그룹화됨atable이 예에서는 SQL 데이터베이스에 대한 "create" 문이 생성되어 있습니다.for루프:
import pandas as pd
df1 = pd.DataFrame({
    'atable':     ['Users', 'Users', 'Domains', 'Domains', 'Locks'],
    'column':     ['col_1', 'col_2', 'col_a', 'col_b', 'col'],
    'column_type':['varchar', 'varchar', 'int', 'varchar', 'varchar'],
    'is_null':    ['No', 'No', 'Yes', 'No', 'Yes'],
})
df1_grouped = df1.groupby('atable')
# iterate over each group
for group_name, df_group in df1_grouped:
    print('\nCREATE TABLE {}('.format(group_name))
    for row_index, row in df_group.iterrows():
        col = row['column']
        column_type = row['column_type']
        is_null = 'NOT NULL' if row['is_null'] == 'No' else ''
        print('\t{} {} {},'.format(col, column_type, is_null))
    print(");")
데이터 프레임이 이미 생성된 경우 인덱스 값을 반복할 수 있습니다.
df = df.groupby('l_customer_id_i').agg(lambda x: ','.join(x))
for name in df.index:
    print name
    print df.loc[name]
언급URL : https://stackoverflow.com/questions/27405483/how-to-loop-over-grouped-pandas-dataframe
'source' 카테고리의 다른 글
| JavaScript: 클라이언트 측과 서버 측 검증 (0) | 2022.11.15 | 
|---|---|
| 이름에 점(.)이 있는 경우 systemd 오류가 발생합니다.사용자/그룹 이름 또는 숫자 ID가 잘못되었습니다. (0) | 2022.11.15 | 
| 블레이드 템플릿의 모든 HTML 이스케이프 Larabel (0) | 2022.11.05 | 
| Mockito는 여러 번 호출된 메서드의 인수를 캡처할 수 있습니까? (0) | 2022.11.05 | 
| 예외를 발생시킨 예외 설명 및 스택 추적을 모두 문자열로 가져옵니다. (0) | 2022.11.05 |