Свертывание мультииндекса в индекс после отмены стека - PullRequest
0 голосов
/ 14 октября 2019

Как мне манипулировать следующим фреймом данных, чтобы столбцы были индексом, а не мультииндексом:

df = pandas.DataFrame([
    {'col_1': 'A', 'col_2': 'A', 'value': 1},
    {'col_1': 'A', 'col_2': 'B', 'value': 1},
    {'col_1': 'A', 'col_2': 'C', 'value': 1},
    {'col_1': 'B', 'col_2': 'A', 'value': 1},
    {'col_1': 'B', 'col_2': 'B', 'value': 1},
    {'col_1': 'B', 'col_2': 'C', 'value': 1},
]).set_index(['col_1', 'col_2']).unstack()

Это дает:

      value      
col_2     A  B  C
col_1            
A         1  1  1
B         1  1  1

Однако,Я хотел бы:

col_1     A  B  C
A         1  1  1
B         1  1  1

Я знаю, что могу использовать .loc, чтобы добраться до половины пути:

df.loc[:, 'value']

Это дает:

col_2  A  B  C
col_1         
A      1  1  1
B      1  1  1

ОднакоЯ не вижу следующего шага.

Ответы [ 3 ]

1 голос
/ 14 октября 2019

То, что вы видите, это имена pandas.Index объектов, которые находятся в атрибутах index и columns фрейма данных. Чтобы сохранить тот, который вы показали, вы хотите избавиться от имени объекта pandas.Index в атрибуте columns.

df.value.rename_axis(None, axis=1)

       A  B  C
col_1         
A      1  1  1
B      1  1  1

Чтобы продвинуться дальше, вам действительно нужноудалить col_1 из index, используя reset_index

df.value.rename_axis(None, axis=1).reset_index()

  col_1  A  B  C
0     A  1  1  1
1     B  1  1  1
1 голос
/ 14 октября 2019

Это фрейм данных unstack, который можно изменить на series

df = pandas.DataFrame([
    {'col_1': 'A', 'col_2': 'A', 'value': 1},
    {'col_1': 'A', 'col_2': 'B', 'value': 1},
    {'col_1': 'A', 'col_2': 'C', 'value': 1},
    {'col_1': 'B', 'col_2': 'A', 'value': 1},
    {'col_1': 'B', 'col_2': 'B', 'value': 1},
    {'col_1': 'B', 'col_2': 'C', 'value': 1},
]).set_index(['col_1', 'col_2']).value.unstack()
df
col_2  A  B  C
col_1         
A      1  1  1
B      1  1  1
0 голосов
/ 14 октября 2019

Вы можете сделать:

df.columns = [e[1] for e in df.columns.values]
print(df)

Вывод

       A  B  C
col_1         
A      1  1  1
B      1  1  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...