如何检查数据帧行名称是否与列名匹配

时间:2018-06-15 10:09:20

标签: python pandas

我想遍历数据框,检查行名是否与列名匹配。如果它们匹配,我想将交集的值设置为零。我尝试过几个选项,但没有一个可行。这是伪代码,显示了我想要做的事情:

for row in dataframe:
    if row_name == column_name:
        dataframe[rowname][columnname] = 0

这就是数据的样子:

        NAME1    NAME2    NAME3
NAME1    1       .9         .2
NAME2    .6      1          .7
NAME3    .5      .8         1

2 个答案:

答案 0 :(得分:1)

您可以计算索引和列的交集。然后迭代交集并使用const respond = await db.put(doc, {force: true})来设置值。

pd.DataFrame.loc

答案 1 :(得分:0)

比@ jpp更复杂的方法,你可以stack df,所以列名形成索引的第二级:

In[296]:
stack = df.stack()
stack

Out[296]: 
NAME1  NAME1    1.0
       NAME2    0.9
       NAME3    0.2
NAME2  NAME1    0.6
       NAME2    1.0
       NAME3    0.7
NAME3  NAME1    0.5
       NAME2    0.8
       NAME3    1.0
dtype: float64

然后我们可以屏蔽堆叠的df并设置为索引级别值匹配的0

In[297]:
stack.loc[stack.index.get_level_values(0) == stack.index.get_level_values(1)] = 0
stack

Out[297]: 
NAME1  NAME1    0.0
       NAME2    0.9
       NAME3    0.2
NAME2  NAME1    0.6
       NAME2    0.0
       NAME3    0.7
NAME3  NAME1    0.5
       NAME2    0.8
       NAME3    0.0
dtype: float64

然后我们致电unstack以恢复原来的df:

In[298]:
stack.unstack()

Out[298]: 
       NAME1  NAME2  NAME3
NAME1    0.0    0.9    0.2
NAME2    0.6    0.0    0.7
NAME3    0.5    0.8    0.0

由于您通过调用stackunstack来创建临时df,因此这会对小df产生更大的性能影响,但如果您有大量的索引重叠和列值然后它避免looping