Форматирование вывода стека Pandas после сводной таблицы

#python #pandas

#python #pandas

Вопрос:

Я создаю сводную таблицу из фрейма данных, предоставляя 2 столбца в качестве сводных входных данных, как показано в приведенном ниже коде. После применения pivot мне нужно использовать этот накопленный вывод для объединения с аналогичным фреймом данных столбца, для этого я хочу отказаться от имени (‘Brand amp; type’), которое также отображается над именем индекса, как я могу этого добиться. пожалуйста, обратите внимание, что я хочу сохранить вывод в стеке

 import pandas as pd

cars = {'day':['aug','aug','sep','sep','aug'],
        'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Hyundai Elite i20'],
        'Type':['sedan,','sedan','hatchback','hatchback','hatchback'],
        'Down Price': [22000,25000,27000,35000,10000]
        }

df = pd.DataFrame(cars, columns = ['day','Brand', 'Type','Down Price'])
dfpivot=pd.pivot_table(df,index=['day'],columns=['Brand','Type'],values=['Down Price'],aggfunc=np.max)
dfpivot.columns = dfpivot.columns.droplevel(0)
  

Я попытался сбросить индекс, но это не сработало

 dfpivot.rename_axis(None, axis=1).reset_index()
  

Затем я попытался удалить индекс, который также не сработал. Как я могу удалить название бренда и тип, который отображается над индексом. Заранее благодарю вас.

после добавления решения

 dfpivot.columns.name=[None,None]
  

Обратная трассировка:

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-102-ef1eb88ee6b2> in <module>
     10 dfpivot=pd.pivot_table(df,index=['day'],columns=['Brand','Type'],values=['Down Price'],aggfunc=np.max)
     11 
---> 12 dfpivot.columns.name=[None,None]

~AppDataLocalContinuumanaconda3libsite-packagespandascoreindexesbase.py in name(self, value)
   1192                 "'MultiIndex.set_names' instead."
   1193             )
-> 1194         maybe_extract_name(value, None, type(self))
   1195         self._name = value
   1196 

~AppDataLocalContinuumanaconda3libsite-packagespandascoreindexesbase.py in maybe_extract_name(name, obj, cls)
   5402     # GH#29069
   5403     if not is_hashable(name):
-> 5404         raise TypeError(f"{cls.__name__}.name must be a hashable type")
   5405 
   5406     return name

TypeError: MultiIndex.name must be a hashable type
  

Ответ №1:

Это столбец names . Просто установите их на None :

 dfpivot.columns.names = [None, None]
dfpivot.index.names = [None] # only do this if you do not want the name of your index (day)
  

Комментарии:

1. Привет, большое спасибо за такой быстрый ответ. Я попробовал это после вашего предложения, оно выдает эту ошибку-TypeError: MultiIndex.name должен быть хэшируемый тип

2. Пожалуйста, добавьте полный ответ на вопросы.

3. добавлено по запросу

4. @DD08 На основе обратной трассировки похоже, что вы использовали name единственное, а не names множественное число: dfpivot.columns.name=[None,None] это должно быть dfpivot.columns.names = [None, None]

5. Это_ис_крис. Я допустил такую незначительную ошибку, спасибо за предложение и указание на ошибку