Замените верхний и нижний значения треугольника в кадре данных на ноль или оставьте только диагональные значения - PullRequest
1 голос
/ 10 октября 2019

У меня есть следующий DataFrame в качестве игрушечного примера:

a = [5,2,6,8]
b = [2,10,19,16]
c = [3,8,15,17]
d = [3,8,12,20]
df  = pd.DataFrame([a,b,c,d], columns = ['a','b','c','d'])
df

Я хочу создать новый DataFrame df1, который сохраняет только диагональные элементы и преобразует верхнее и нижнее треугольные значения в ноль.

Мой окончательный набор данных должен выглядеть следующим образом:

    a   b   c   d
0   5   0   0   0
1   0   10  0   0
2   0   0   15  0
3   0   0   0   20

Ответы [ 2 ]

5 голосов
/ 10 октября 2019

Вы можете использовать numpy.diag :

df = pd.DataFrame(data=np.diag(np.diag(df)), columns=df.columns)
print(df)

Выход

   a   b   c   d
0  5   0   0   0
1  0  10   0   0
2  0   0  15   0
3  0   0   0  20
1 голос
/ 10 октября 2019
import pandas as pd

def diag(df):
    res_df = pd.DataFrame(0, index=df.index, columns=df.columns)
    for i in range(min(df.shape)): res_df.iloc[i, i] = df.iloc[i, i]
    return res_df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...