Как изменить все элементы выше главной диагонали матрицы

Есть pandas квадратная матрица. Как заполнить нулями значения выше главной диагонали нулями? Пытался через np.triu_indices, но это для numpy матриц.


Ответы (2 шт):

Автор решения: splash58

если выше диагонали

import numpy as np
import pandas as pd

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7,8,9]], 
     columns=['a','b','c'], index=['x','y','z'])

df[:] = np.tril(df.values)
print(df)

   a  b  c
x  1  0  0
y  4  5  0
z  7  8  9

а если, с учетом предыдущего вопроса, диагональ тоже

import numpy as np
import pandas as pd

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7,8,9]])
df[:] = np.tril(df.values, k=-1)
print(df)

   0  1  2
0  0  0  0
1  4  0  0
2  7  8  0
→ Ссылка
Автор решения: Алексей Р
n = 5
df = pd.DataFrame(np.random.randint(1, 10, n * n).reshape(n, -1))
print('Исходный фрейм:', df, sep='\n')
df = df.apply(lambda x: [0] * x.name + x[x.name:].tolist())
print('\nРезультат:', df, sep='\n')
Исходный фрейм:
   0  1  2  3  4
0  7  7  4  3  6
1  6  4  1  6  7
2  7  7  5  4  8
3  9  4  4  3  8
4  3  7  8  7  8

Результат:
   0  1  2  3  4
0  7  0  0  0  0
1  6  4  0  0  0
2  7  7  5  0  0
3  9  4  4  3  0
4  3  7  8  7  8
→ Ссылка