Получение индексов меток Pandas DataFrame из нескольких столбцов - PullRequest
0 голосов
/ 01 февраля 2019

Я выясняю, как получить индексы меток в Pandas DataFrame на основе значений столбцов.У меня есть следующее DataFrame:

d = {'col1': ['label1', 'label2', 'label3'], 
     'col2': ['label2', 'label3', 'label1'], 
     'col3': ['label2', 'label1', 'label3'],
     'col4': ['label3', 'label1', 'label2']}

df = pd.DataFrame(data = d)

, которое форматируется как:

     col1    col2    col3    col4
0  label1  label2  label2  label3
1  label2  label3  label1  label1
2  label3  label1  label3  label2

Я пытаюсь получить его в следующей форме:

       label1 label2 label3
col1      0      1      2
col2      2      0      1
col3      1      0      2
col4      1      2      0

Это говорит об индексе каждой метки в соответствующем столбце в исходном кадре данных df.Например, в col3 индексы меток 1-3 равны 1, 0 и 2 соответственно.

Ответы [ 2 ]

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

Вы можете transpose, а затем argsort:

res = pd.DataFrame(df.T.values.argsort(1),
                   columns=np.sort(df.iloc[:, 0].values),
                   index=df.columns)

print(res)

      label1  label2  label3
col1       0       1       2
col2       2       0       1
col3       1       0       2
col4       1       2       0
0 голосов
/ 01 февраля 2019

Используйте stack с reset_index и pivot:

df1 = df.stack().reset_index(name='v').pivot('level_1','v','level_0')
print (df1)
  v        label1  label2  label3
level_1                        
col1          0       1       2
col2          2       0       1
col3          1       0       2
col4          1       2       0  

Или reset_index с melt и pivot:

df1 = df.reset_index().melt('index').pivot('variable','value','index')
print (df1)
 value     label1  label2  label3
variable                        
col1           0       1       2
col2           2       0       1
col3           1       0       2
col4           1       2       0

Последний шаг - удаление имен индексов и столбцов:

df1.index.name = None
df1.columns.name = None
print (df1)
      label1  label2  label3
col1       0       1       2
col2       2       0       1
col3       1       0       2
col4       1       2       0     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...