如何在迭代 pandas 分组 df 时修复 ValueError?

Posted

技术标签:

【中文标题】如何在迭代 pandas 分组 df 时修复 ValueError?【英文标题】:How to fix ValueError in iterating pandas grouped df? 【发布时间】:2019-08-25 19:04:29 【问题描述】:

由于值错误,无法迭代 pandas 数据帧的分组值。

我考虑的df是,

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)

【问题讨论】:

我已经尝试过 for index, group in data_df_grp.groupby(['class','section','school','city']): & for index,row in group.iterrows( ): 你能定义data_df_grp吗? 参考“***.com/questions/27405483/…” @amannagariya,我也试过了,它返回 ValueError 【参考方案1】:
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 方法已经返回一个数据帧,你不能再次循环它。

【讨论】:

以上是关于如何在迭代 pandas 分组 df 时修复 ValueError?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 计算分组天数

使用 agg 函数在 pandas 中分组时进行舍入

如何在 Python Pandas 中扩展存储为单个值的可迭代对象? (又名反向分组)[重复]

如何修复“pandas.core.common”没有属性“AbstractMethodError”?

使用 Pandas 在同一图中绘制分组数据

如何在panda中对行和多列进行迭代?