2024-09-30 00:40:52 发布
网友
我有一个数据帧(650650),看起来像是描述的那个。 我需要找到具有相同列和行名的元素(标签/索引。。。你喜欢怎么称呼它)并使它们等于零。在
car0 car1 car2 car3 car0 0 0,25 0,83 2 car1 1,23 0 0,83 0 car2 6,83 0,25 0 5 car3 0,23 0,55 0,43 0 car2 12 2 0 0,5 car2 0,5 2 0 0,5
有人能帮忙吗?在
我一直在遍历列和行,但是没有用。在
从您的示例来看,列和行具有相同的标签。如果是,您可以使用:
for i in df.columns: df[i][i] = 0
即使标签的顺序不相同(即对角线上不应出现零),也可以这样做。在
如果有列标签不显示为行标签和viceversa,则需要更详细的解决方案:
如果行或列上的名称重复,请参考@thesilkworm's answer。您也可以使用unique()istead of set,但想法是一样的。在
unique()
set
for i in df.index.unique().intersection(df.columns.unique()): df.loc[i, i] = 0
更新问题后更新答案:
首先,获取一组在索引和列名中都具有特征的唯一值:
names = set(df.columns).intersection(df.index)
然后迭代它们,使用.loc设置值:
.loc
这与@Valentino的答案类似,只是做了一个修正,以确保我们只对每个名字循环一次。在
最初的答案是假设我们只需填充对角线:
您可以使用^{}来避免循环:
import numpy as np import pandas as pd df = pd.DataFrame(np.random.random(size=(5, 5))) np.fill_diagonal(df.values, 0)
结果:
0 1 2 3 4 0 0.000000 0.707695 0.275748 0.449722 0.321772 1 0.343112 0.000000 0.051894 0.879492 0.210940 2 0.845859 0.016546 0.000000 0.347568 0.233525 3 0.483467 0.094216 0.583731 0.000000 0.242194 4 0.638833 0.382917 0.321501 0.190206 0.000000
从您的示例来看,列和行具有相同的标签。如果是,您可以使用:
即使标签的顺序不相同(即对角线上不应出现零),也可以这样做。在
如果有列标签不显示为行标签和viceversa,则需要更详细的解决方案:
^{pr2}$如果行或列上的名称重复,请参考@thesilkworm's answer。您也可以使用
unique()
istead ofset
,但想法是一样的。在更新问题后更新答案:
首先,获取一组在索引和列名中都具有特征的唯一值:
然后迭代它们,使用
^{pr2}$.loc
设置值:这与@Valentino的答案类似,只是做了一个修正,以确保我们只对每个名字循环一次。在
最初的答案是假设我们只需填充对角线:
您可以使用^{} 来避免循环:
结果:
相关问题 更多 >
编程相关推荐