Разделите индекс, столбец и значение в симметричном c Pandas кадре данных на три разных столбца без дублирования - PullRequest
0 голосов
/ 18 июня 2020

В настоящее время мой df выглядит так:

    a   b   c   
a   0   7   9  
b   7   0   3  
c   9   3   0   

Я хотел бы сделать пару столбцов и индексов и соответствующее значение в трех отдельных столбцах, но таким образом, чтобы пары не повторялись ( поскольку это симметрично c):

column   index   value
a        a       0
a        b       7
a        c       9     
b        b       0
b        c       3
c        c       0

Спасибо.

Ответы [ 2 ]

3 голосов
/ 18 июня 2020

Мы можем использовать

df=df.where(np.triu(np.ones(df.shape)).astype(np.bool)).stack().reset_index()
  level_0 level_1    0
0       a       a  0.0
1       a       b  7.0
2       a       c  9.0
3       b       b  0.0
4       b       c  3.0
5       c       c  0.0

Или мы делаем melt с np.sort, затем отбрасываем duplicate

s=df.reset_index().melt('index')
s[~pd.DataFrame(np.sort(s[['index','variable']],axis=1)).duplicated().values]
  index variable  value
0     a        a      0
1     b        a      7
2     c        a      9
4     b        b      0
5     c        b      3
8     c        c      0
0 голосов
/ 18 июня 2020

Создайте комбинацию букв ("ab c") и переиндексируйте фрейм данных после stacking

from itertools import combinations_with_replacement
new_index = pd.MultiIndex.from_tuples(combinations_with_replacement("abc",2),
                                      names=["columns","index"])

new_index

MultiIndex([('a', 'a'),
            ('a', 'b'),
            ('a', 'c'),
            ('b', 'b'),
            ('b', 'c'),
            ('c', 'c')],
           names=['columns', 'index'])

#reindex
df.stack().reindex(new_index).reset_index(name='value')


 columns     index  value
0   a           a   0
1   a           b   7
2   a           c   9
3   b           b   0
4   b           c   3
5   c           c   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...