Выберите столбцы, по которым был сгруппирован фрейм данных Pandas

#python #python-3.x #pandas #dataframe #pandas-groupby

Вопрос:

У меня есть фрейм данных панд flsa :

 flsa[:10]

        auc  topics       ww  top-n  fold
0  0.668729      11  entropy     10     1
1  0.609736      11  entropy     10     2
2  0.654445      11  entropy     10     3
3  0.612886      11  entropy     10     4
4  0.596460      11  entropy     10     5
5  0.654208      11  entropy     15     1
6  0.620610      11  entropy     15     2
7  0.637275      11  entropy     15     3
8  0.603725      11  entropy     15     4
9  0.596100      11  entropy     15     5
 

Теперь я сгруппирую их следующим образом:

 mean_flsa_auc = flsa.groupby(['topics','ww']).mean('auc').drop('fold', axis =  1).drop('top-n', axis=1)
 

В результате чего:

 mean_flsa_auc[:10]

                     auc
topics ww               
3      entropy  0.610580
       idf      0.593962
       normal   0.623830
       probidf  0.598362
5      entropy  0.623360
       idf      0.619105
       normal   0.644371
       probidf  0.617489
7      entropy  0.631131
       idf      0.624773
 

Теперь я хотел бы сделать следующую линейную диаграмму: ось x: темы, ось y: auc, 4 строки: энтропия, idf, нормальная, вероятностная.

Однако всякий раз, когда я хочу выбрать все значения «энтропии»:

 mean_flsa_auc[mean_flsa_auc['ww'] == 'entropy']
 

Я получаю следующую ошибку:

 Traceback (most recent call last):

  File "C:Users20200016Anaconda3libsite-packagespandascoreindexesbase.py", line 2895, in get_loc
    return self._engine.get_loc(casted_key)

  File "pandas_libsindex.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc

  File "pandas_libsindex.pyx", line 101, in pandas._libs.index.IndexEngine.get_loc

  File "pandas_libshashtable_class_helper.pxi", line 1675, in pandas._libs.hashtable.PyObjectHashTable.get_item

  File "pandas_libshashtable_class_helper.pxi", line 1683, in pandas._libs.hashtable.PyObjectHashTable.get_item

KeyError: 'ww'


    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
    
      File "<ipython-input-490-0dacb2bb9cf3>", line 1, in <module>
        mean_flsa_auc[mean_flsa_auc['ww'] == 'entropy']
    
      File "C:Users20200016Anaconda3libsite-packagespandascoreframe.py", line 2902, in __getitem__
        indexer = self.columns.get_loc(key)
    
      File "C:Users20200016Anaconda3libsite-packagespandascoreindexesbase.py", line 2897, in get_loc
        raise KeyError(key) from err
    
    KeyError: 'ww'
 

Я подозреваю, что я отношусь mean_flsa_auc к объекту как dataframe к объекту, в то время groupby как сейчас это объект. Но я не знаю, как изменить свой код, чтобы получить список всех entropy значений в объекте groupby.

Кто может мне в этом помочь?

Ответ №1:

Вы можете использовать as_index=False в своем groupby() заявлении для сохранения столбцов полей groupby, как показано ниже:

 mean_flsa_auc = flsa.groupby(['topics','ww'], as_index=False).mean('auc').drop('fold', axis =  1).drop('top-n', axis=1)
 

По умолчанию groupby() установите поля, сгруппированные по индексу, чтобы вы не могли получить доступ к этим полям, как раньше, как к обычным столбцам данных. С параметром index=False эти поля не будут заданы в качестве индекса и останутся в столбцах данных.

Кроме того, вы также можете выполнить .reset_index() последующее использование существующего кода для перемещения полей индекса обратно в столбцы данных, как показано ниже:

 mean_flsa_auc = mean_flsa_auc.reset_index()
 

Затем вы можете получить доступ к ww колонке.