Python - 如果列名和行名相同则转换值
Python - convert values if column and row names are the same
我有一个 df 如下 - 我想要做的是将 1
转换为 0
如果只有列名等于行名。
打印(df)
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)
Note:
有时会有多个同名行,但所有列名都是唯一的。
谢谢。
其实你想改变dataframe(Matrix)的对角线。所以你可以使用这个代码:
df.values[[np.arange(df.shape[0])]*2] = 0
您也可以使用 Numpy
执行此操作:
import numpy as np
np.fill_diagonal(df.values, 0)
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
我有一个 df 如下 - 我想要做的是将 1
转换为 0
如果只有列名等于行名。
打印(df)
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)
Note:
有时会有多个同名行,但所有列名都是唯一的。
谢谢。
其实你想改变dataframe(Matrix)的对角线。所以你可以使用这个代码:
df.values[[np.arange(df.shape[0])]*2] = 0
您也可以使用 Numpy
执行此操作:
import numpy as np
np.fill_diagonal(df.values, 0)
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