Как исправить ValueError в итерации панд сгруппированных df? - PullRequest
3 голосов
/ 04 апреля 2019

Невозможно повторить сгруппированное значение кадра данных pandas из-за ошибки значения.

ДФ, которую я считаю, это

df:
  class section  sub  marks school   city
0     I       A  Eng     80  jghss  salem
1     I       A  Mat     90  jghss  salem
2     I       A  Eng     50  jghss  salem
3   III       A  Eng     80  gphss  salem
4   III       A  Mat     45  gphss  salem
5   III       A  Eng     40  gphss  salem
6   III       A  Eng     20  gphss  salem
7   III       A  Mat     55  gphss  salem

Для группировки значений столбцов (т. Е. «Sub» и «marks») в качестве списка, я использовал,

df_grp = df.groupby(['class','section','school','city']).agg(lambda x: list(x))

df_grp есть,

class section school city    sub                       marks                                                
I     A       jghss  salem            [Eng, Mat, Eng]          [80, 90, 50]
III   A       gphss  salem  [Eng, Mat, Eng, Eng, Mat]  [80, 45, 40, 20, 55]

Теперь мне нужно выполнить итерацию df_grp, чтобы извлечь значения всех столбцов, например

Row 1:-
    class = I
    section = A
    school = jghss
    city = salem
    sub = [Eng, Mat, Eng]
    marks = [80, 90, 50]

Row 2:-
    class = III
    section = A
    school = gphss
    city = salem
    sub = [Eng, Mat, Eng, Eng, Mat]
    marks = [80, 45, 40, 20, 55]

Теперь для итерации df_grp для извлечения значений столбца я использовал

for index,group in df_grp:
    for subIndex, row in group.iterrows():
        sub = row['sub']
        marks = row['marks']

Когда я использую то же самое, он возвращает

ValueError: too many values to unpack (expected 2)

1 Ответ

2 голосов
/ 05 апреля 2019
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').agg(lambda x: list(x))
for row in df1_grouped.iterrows():
    print(row[1].column)

Вот пример, он вернет данные первого столбца

Метод groupby уже возвращает фрейм данных, и вы не можете зациклить его снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...