Чтобы заменить обе диагонали DataFrame на 0 в pandas, вы можете использовать несколько методов. Вот несколько вариантов:
Метод 1: использование индексации NumPy и DataFrame
import numpy as np
import pandas as pd
# Create a sample DataFrame
df = pd.DataFrame(np.random.randint(1, 10, size=(5, 5)))
# Replace the diagonals with 0
df.values[[np.arange(df.shape[0])]*2] = 0
# Display the modified DataFrame
print(df)
Метод 2: использование метода at
import pandas as pd
# Create a sample DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# Replace the diagonals with 0
for i in range(len(df)):
df.at[i, i] = 0
df.at[i, len(df) - i - 1] = 0
# Display the modified DataFrame
print(df)
Метод 3: использование метода applymap
import pandas as pd
# Create a sample DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# Replace the diagonals with 0
df = df.applymap(lambda x: 0 if df.columns.get_loc(x) == df.index.get_loc(x) or
df.columns.get_loc(x) == (df.shape[1] - df.index.get_loc(x) - 1)
else x)
# Display the modified DataFrame
print(df)
Метод 4. Использование метода maskс логическим индексированием
import pandas as pd
# Create a sample DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# Replace the diagonals with 0
df = df.mask(df.columns == df.index, 0).mask(df.columns == df.shape[1] - df.index - 1, 0)
# Display the modified DataFrame
print(df)