#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
колонке.