通过行和列索引查找Dataframe中元素的确切位置

2024-09-30 00:40:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧(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

有人能帮忙吗?在

我一直在遍历列和行,但是没有用。在

^{pr2}$

Tags: 数据元素标签pr2car1car2car3car0
2条回答

从您的示例来看,列和行具有相同的标签。如果是,您可以使用:

for i in df.columns:
    df[i][i] = 0

即使标签的顺序不相同(即对角线上不应出现零),也可以这样做。在

如果有列标签不显示为行标签和viceversa,则需要更详细的解决方案:

^{pr2}$

如果行或列上的名称重复,请参考@thesilkworm's answer。您也可以使用unique()istead of set,但想法是一样的。在

for i in df.index.unique().intersection(df.columns.unique()):
    df.loc[i, i] = 0

更新问题后更新答案:

首先,获取一组在索引和列名中都具有特征的唯一值:

names = set(df.columns).intersection(df.index)

然后迭代它们,使用.loc设置值:

^{pr2}$

这与@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

相关问题 更多 >

    热门问题