使用相同的列标题遍历pandas DataFrame

时间:2019-01-21 22:30:41

标签: python pandas

我正在尝试遍历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'

我知道错误是由于重复的列名引起的。我很好奇,有没有办法解决大熊猫这种情况。与第二种情况一样,我拥有所有的DataFrames,我需要从行和列中获取每个索引的值。

谢谢。

在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

在这些数据帧中,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

0 个答案:

没有答案