Итерация и модификация таблицы нижнего треугольника с пустыми верхними значениями - PullRequest
0 голосов
/ 22 февраля 2019

Учитывая матрицу треугольника, которую я имею в excel:

        Random    Name    ValC    ValA
Random
Name      1     
ValC      3      7     
ValA      4      10       20  

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

order = (ValA, Random, ValC, Name)

        ValA    Random    ValC    Name
ValA
Random    4     
ValC      20      3     
Name      10      1       7 

Кроме того, я хотел бы иметь возможность поиграть с именами заголовков для моего удобства:

dict = {'ValA':'Files','Random':'Num', 'ValC':'Restr', 'Name':'Course'}

        Files    Num    Restr    Course
Files
Num      4     
Restr    20      3     
Course   10      1       7  

Заранее спасибо

1 Ответ

0 голосов
/ 22 февраля 2019

Сначала combine_first с транспонированием DataFrame, затем reindex и установите верхний треугольник на NaN с mask, последний rename индекс и столбцы по словарю:

order = ('ValA', 'Random', 'ValC', 'Name')
#dont use dict like variable name, because python code word (builtin) 
d = {'ValA':'Files','Random':'Num', 'ValC':'Restr', 'Name':'Course'}

#if necessary replace empty strings to missing values
df = df.replace('', np.nan)
mask = np.triu(np.ones(df.shape)).astype(np.bool)
df1 = (df.combine_first(df.T)
         .reindex(index=order, columns=order)
         .mask(mask)
         .rename(columns=d, index=d))

print (df)
        Files  Num  Restr  Course
Files     NaN  NaN    NaN     NaN
Num       4.0  NaN    NaN     NaN
Restr    20.0  3.0    NaN     NaN
Course   10.0  1.0    7.0     NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...