首页 > 解决方案 > 迭代具有相同列标题的 pandas DataFrame

问题描述

我正在尝试遍历 Pandas DataFrame 的行和列,并在满足某些条件时将结果写入新的 DataFrame。我能够迭代以下具有不同名称的行和列的 DataFrame。

     W0O5  W1O5  W2O5  W3O5
W0O5   0.0   0.0   0.0   0.0
W1O5   0.0   0.0   1.0   0.0
W2O5   0.0   1.0   0.0   0.0
W3O5   0.0   0.0   0.0   0.0

我使用了以下方法

for i in pandas_df.index:
    for j in pandas_df.columns:
        print(i, j)
        print(pandas_df.at[i, j])
        if pandas_df.at[i, j] ==1:
            single_pandas_df.at['WO5', 'WO5_corner'] =1

其中 single_pandas_df 是我创建的新 DataFrame,我想在其上添加相应行和列的值。

但是,当我尝试遍历包含相同标题的行和列的 DataFrame 时,如下所示:

     WO5  WO5  WO5  WO5
WO5  0.0  0.0  0.0  0.0
WO5  0.0  0.0  1.0  0.0
WO5  0.0  1.0  0.0  0.0
WO5  0.0  0.0  0.0  0.0

我得到 AttributeError 说

AttributeError:“BlockManager”对象没有属性“T”

我知道错误是由于重复的列名造成的。我很好奇有没有办法在熊猫中处理这种情况。在第二种情况下,我拥有所有的 DataFrame,我需要从行和列中获取每个索引的值。

提前致谢。

Yolos评论后更新:实际上我有很多这样的DataFrames如下

      DyO7  DyO7  DyO6  DyO7  DyO7  DyO6
DyO7   0.0   3.0   1.0   2.0   1.0   0.0
DyO7   3.0   0.0   0.0   1.0   0.0   1.0
DyO6   1.0   0.0   0.0   0.0   1.0   0.0
DyO7   2.0   1.0   0.0   0.0   3.0   1.0
DyO7   1.0   0.0   1.0   3.0   0.0   0.0
DyO6   0.0   1.0   0.0   1.0   0.0   0.0

下一个为

       TaO6  TaO6
TaO6   0.0   1.0
TaO6   1.0   0.0

在这些 DataFrames 1、2 和 3 中,代表角、边和人脸共享。因此,如果 DataFrame 中的 (i,j) 项为 1,则转到“...”_corner,如果 2 则转到边缘,3 转到面。

我最初的 single_pandas DataFrame 如下所示

       DyO6_corner  DyO6_edge  DyO6_face  DyO7_corner  DyO7_edge  DyO7_face  TaO6_corner  TaO6_edge  TaO6_face  WO5_corner  WO5_edge  WO5_face
DyO6          0.0        0.0        0.0          0.0        0.0        0.0          0.0        0.0        0.0         0.0       0.0       0.0
DyO7          0.0        0.0        0.0          0.0        0.0        0.0          0.0        0.0        0.0         0.0       0.0       0.0
TaO6          0.0        0.0        0.0          0.0        0.0        0.0          0.0        0.0        0.0         0.0       0.0       0.0
WO5           0.0        0.0        0.0          0.0        0.0        0.0          0.0        0.0        0.0         0.0       0.0       0.0

从我上面的脚本更新这个 single_pandas DataFrame 后,('WO5', 'WO5_corner') 将有 1,它变为:

      DyO6_corner  DyO6_edge  DyO6_face  DyO7_corner  DyO7_edge  DyO7_face  TaO6_corner  TaO6_edge  TaO6_face  WO5_corner  WO5_edge  WO5_face
DyO6          0.0        0.0        0.0          0.0        0.0        0.0          0.0        0.0        0.0         0.0       0.0       0.0
DyO7          0.0        0.0        0.0          0.0        0.0        0.0          0.0        0.0        0.0         0.0       0.0       0.0
TaO6          0.0        0.0        0.0          0.0        0.0        0.0          0.0        0.0        0.0         0.0       0.0       0.0
WO5           0.0        0.0        0.0          0.0        0.0        0.0          0.0        0.0        0.0         1         0.0       0.0

标签: pythonpandas

解决方案


推荐阅读