使用抛出 ValueError 的多列遍历数据帧

Looping over dataframe using multiple columns throwing ValueError

我正在尝试在 Pandas 数据帧内申请循环以一次访问两列。我的一段代码非常适合单列。但是当应用于多列时,它会抛出:“ValueError:要解压的值太多(预期为 2)”

我的代码片段如下-

for col1, col2 in df.columns:
    if col1.startswith('ColumnName1') and col2.startswith('ColumnName2') and df[col2].notnull()*1:
        new_df = df.groupby([col1, col2]).agg({'ColumnName3': 'unique'}).reset_index()
    elif col1.startswith('ColumnName1') and col2.startswith('ColumnName2') and not df[col2].notnull()*1:
        new_df = df.groupby(col1).agg({'ColumnName3': 'unique'}).reset_index()

小问题是列名太大且不受控制,因为此数据框具有多标题列,因此合并后它们会创建一些随机填充名称。因此 “。以。。开始”。列名要大得多。

我正在尝试根据第 1 列和第 2 列执行第 3 列的分组,如果第 2 列不为空,否则当第 2 列为空时使用第 1 列的分组。

谁能告诉我哪里错了,或者我错过了什么?

如果您想一次循环 df.columns 两个值,您可以这样做:

import itertools as it

for col1, col2 in it.zip_longest(*[iter(df.columns)]*2):
    ...

我们在列上创建一个包含迭代器的列表,然后应用 *2 以获取包含两个相同迭代器对象的列表。因为它是同一个迭代器,所以每当我们迭代一个时,我们也会推进另一个。然后我们将它们压缩在一起,从长度为 len(df.columns) // 2 的 2 项序列到具有 len(df.columns) // 2 项的 2 项元组的序列。