Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-如果列和行名称相同,则转换值_Python_Dataframe_Intersection - Fatal编程技术网

Python-如果列和行名称相同,则转换值

Python-如果列和行名称相同,则转换值,python,dataframe,intersection,Python,Dataframe,Intersection,我有一个df,如下所示-如果只有列名等于行名,我想做的是将1转换为0 printdf name seq102681 seq103 seq11 0 seq102681 1 0 0 1 seq103 0 1 0 2 seq11 1 1 1 所需输出应为: name seq102681 seq103 seq11 0 s

我有一个df,如下所示-如果只有列名等于行名,我想做的是将1转换为0

printdf

         name  seq102681  seq103  seq11
0     seq102681     1       0      0
1      seq103       0       1      0
2       seq11       1       1      1
所需输出应为:

         name  seq102681  seq103  seq11
0     seq102681     0       0      0
1      seq103       0       0      0
2       seq11       1       1      0
我试过使用交叉路口,但不起作用

import pandas as pd
df = pd.read_csv('file.csv')

intersection = df.index & df.columns
for item in intersection:
    df.loc[item, item] = 0
print(df)
注意:有时有多行具有相同的名称,但所有列名都是唯一的


谢谢。

事实上,您想要更改数据帧矩阵的对角线。因此,您可以使用以下代码:

df.values[[np.arange(df.shape[0])]*2] = 0
您还可以使用Numpy执行此操作:


实际上,您需要更改数据帧矩阵的对角线。因此,您可以使用以下代码:

df.values[[np.arange(df.shape[0])]*2] = 0
您还可以使用Numpy执行此操作:


它不总是对角的-有时有多行具有相同的名称,但所有的列名都是唯一的。它不总是对角的-有时有多行具有相同的名称,但所有的列名都是唯一的。如果碰巧有一行的名称值为'name',则该值将设置为0,我认为是唯一的我的解决方案与你的解决方案相同,处理的是次要边缘案例如果碰巧有一行name的值为'name',则该行将设置为0,我认为这是一个排除案例我的解决方案与你的解决方案相同,处理的是次要边缘案例谢谢@fibonacheresthank you@fibonacheres
col_list = list(df.columns)
col_list.remove('name')

for col in col_list:
  df.loc[df['name'] == col, col] = 0
  
   for col in df.columns:
        df.loc[df['name'] == col, col] = 0