【发布时间】:2021-08-29 19:34:00
【问题描述】:
我正在尝试在 Pandas 数据框中申请循环以一次访问两列。我的一段代码非常适合单列。但是当应用于多个列时,它会抛出:“ValueError : too many values to unpack (expected 2)”
我的代码sn-p如下-
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 列进行分组。
谁能告诉我我哪里错了,或者我在这里错过了什么?
【问题讨论】:
-
好的,谢谢你的想法。所以我认为不可能像这样循环遍历数据框
-
如果您必须一次访问两列,不妨试试
for col1, col2 in zip(df.columns, df.columns[1:]):。这会迭代两个并行列表,其中一个是另一个的 1-shifted 版本,当较短的耗尽时它会停止。
标签: python pandas dataframe multiple-columns multi-index