Панды: конвертировать одну матрицу в другую - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь преобразовать матрицу (df), чтобы получить другую (df2), и понятия не имею, как ..

[df]
      X     Y     Z
a  None     x  None
b  None  None     x
c     x  None  None

[df2]
    X     Y     Z
 None     a  None
 None  None     b
    c  None  None

, если это поможет, вот конструкцияиз df:

import pandas as pd
df = pd.DataFrame([[None, 'x', None], [None, None, 'x'], ['x', None, None]],
     index=['a', 'b', 'c'],
     columns=['X', 'Y', 'Z'])
print(f'\n{df.to_string()}')

Ответы [ 3 ]

2 голосов
/ 20 сентября 2019

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

df = df.mask(df.notnull(), df.index)

print(df)
      X     Y     Z
a  None     a  None
b  None  None     b
c     c  None  None
2 голосов
/ 20 сентября 2019

Вы можете проверить mul

df.eq('x').mul(df.index.tolist(),0)
Out[109]: 
   X  Y  Z
a     a   
b        b
c  c      
0 голосов
/ 20 сентября 2019

Другая альтернатива, использующая apply:

ddf = df.apply(lambda row : pd.Series(row.name if el == 'x' else el for el in row), axis=1)
ddf.columns = df.columns

Последняя строка, потому что имена столбцов потеряны, поэтому вам нужно их повторно проанализировать.
В основном заменяет все 'x' на индексы строк, оставляядругие значения, как они есть (даже если они не None).

Результат ddf равен:

      X     Y     Z
a  None     a  None
b  None  None     b
c     c  None  None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...