我想遍历数据框,检查行名是否与列名匹配。如果它们匹配,我想将交集的值设置为零。我尝试过几个选项,但没有一个可行。这是伪代码,显示了我想要做的事情:
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
答案 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
由于您通过调用stack
和unstack
来创建临时df,因此这会对小df产生更大的性能影响,但如果您有大量的索引重叠和列值然后它避免looping