Панда датафрейм изменить после разворота

python pandas dataframe pivot-table

865 просмотра

2 ответа

110 Репутация автора

Сводный код:

result = pandas.pivot_table(result, values=['value'], index=['index'], columns=['columns'], fill_value=0)

Результат:

        value   value   value   
columns col1    col2    col3    
index
idx1    14      1       1
idx2    2       0       1
idx3    6       0       0  

Я пытался:

result.columns = result.columns.get_level_values(1)

Тогда я получил это:

columns col1    col2    col3
index
idx1    14      1       1
idx2    2       0       1
idx3    6       0       0  

На самом деле, что я хотел бы это:

index   col1    col2    col3
idx1    14      1       1
idx2    2       0       1
idx3    6       0       0

Есть ли способ добиться этого? Помощь действительно ценится. Заранее спасибо.

Автор: Leo Источник Размещён: 07.07.2016 08:03

Ответы (2)


3 плюса

428815 Репутация автора

Решение

Вам нужно удалить с index nameпомощью rename_axis(Новое в pandas 0.18.0):

df = df.rename_axis(None)

Если нужно также удалить columns name, используйте:

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

Если вы используете более старую версию панд, используйте:

df.columns.name = None
df.index.name = None

Образец (если удалить []из pivot_table, удалить Multiindexиз столбцов):

print (result)
   index columns  value
0      1    Toys      5
1      2    Toys      6
2      2    Cars      7
3      1    Toys      2
4      1    Cars      9

print (pd.pivot_table(result, index='index',columns='columns',values='value', fill_value=0)
         .rename_axis(None)
         .rename_axis(None, axis=1))

   Cars  Toys
1     9   3.5
2     7   6.0         

Если использовать [], получите:

result = pd.pivot_table(result, values=['value'], index=['index'], columns=['columns'], fill_value=0)
            .rename_axis(None)
            .rename_axis((None,None), axis=1)
print (result)        
  value     
   Cars Toys
1     9  3.5
2     7  6.0     
Автор: jezrael Размещён: 07.07.2016 08:06

1 плюс

183227 Репутация автора

Рассмотрим этот фрейм данных:

results = pd.DataFrame(
    [
        [14, 1, 1],
        [2, 0, 1],
        [6, 0, 0]
    ],
    pd.Index(['idx1', 'idx2', 'idx3'], name='index'),
    pd.MultiIndex.from_product([['value'], ['col1', 'col2', 'col3']], names=[None, 'columns'])
)

print results

        value          
columns  col1 col2 col3
index                  
idx1       14    1    1
idx2        2    0    1
idx3        6    0    0

Тогда все, что вам нужно, это:

print results.value.rename_axis(None, 1)  # <---- Solution

       col1  col2  col3
index                  
idx1     14     1     1
idx2      2     0     1
idx3      6     0     0
Автор: piRSquared Размещён: 07.07.2016 08:21
Вопросы из категории :
32x32