В моем фрейме данных много столбцов, содержащих категориальные данные. Категории в каждом из столбцов одинаковы: ['A great deal' 'Not very much' 'None at all' 'Quite a lot' nan].

Я пытаюсь нарисовать одну столбчатую диаграмму, которая будет включать все столбцы, но мне трудно, поскольку данные категориальные. Я попытался использовать цикл для последовательного построения столбцов для каждого столбца, а затем просто сдвинуть столбцы для следующих столбцов немного в сторону, но поскольку метки x являются строками, а не числовыми, я не понимаю, как я могу это сделать который.

Вот образец данных, которые я использую:

{'Confidence: The Press': {0: 'A great deal',
  1: 'Not very much',
  2: 'None at all',
  3: 'Not very much',
  4: 'Not very much'},
 'Confidence: Labor Unions': {0: 'A great deal',
  1: 'None at all',
  2: 'Not very much',
  3: 'Not very much',
  4: 'Quite a lot'},
 'Confidence: The Police': {0: 'A great deal',
  1: 'Not very much',
  2: 'Quite a lot',
  3: 'Not very much',
  4: 'Quite a lot'},
 'Confidence: Justice System/Courts': {0: 'A great deal',
  1: 'Not very much',
  2: 'Quite a lot',
  3: 'Not very much',
  4: 'Quite a lot'},
 'Confidence: The Government': {0: 'A great deal',
  1: 'None at all',
  2: 'Not very much',
  3: 'Not very much',
  4: 'Quite a lot'}}
1
Saad Cherkaoui Ikbal 22 Фев 2021 в 00:44

1 ответ

Лучший ответ

Вот один из способов построить гистограмму с помощью панд. Я предполагаю, что вы хотите построить счетчики строк для каждого столбца вашего фрейма данных, и в этом случае вам сначала нужно вычислить счетчики. Это можно сделать, сначала отключив фрейм данных с помощью .melt, а затем вычисление перекрестной таблицы с .crosstab, предполагая, что каждый столбец содержит одни и те же категории. В следующем примере используется образец data, которым вы поделились, и отображает счетчики с помощью горизонтальной гистограммы, чтобы надписи можно было читать без дополнительного форматирования:

import pandas as pd  # v 1.1.3

df = pd.DataFrame(data)
dfmelted = df.melt()

dfmelted.head()
#                    variable          value
#  0    Confidence: The Press   A great deal
#  1    Confidence: The Press  Not very much
#  2    Confidence: The Press    None at all
#  3    Confidence: The Press  Not very much
#  4    Confidence: The Press  Not very much

ctab = pd.crosstab(index=dfmelted['variable'], columns=dfmelted['value'])

ctab
#  value                             A great deal  None at all  Not very much  Quite a lot
#
#                           variable
#  Confidence: Justice System/Courts            1            0              2            2
#           Confidence: Labor Unions            1            1              2            1
#         Confidence: The Government            1            1              2            1
#             Confidence: The Police            1            0              2            2
#              Confidence: The Press            1            1              3            0

ctab.plot.barh(figsize=(6,8), xlabel='count');

barh_counts

Обратите внимание, что значения nan игнорируются. Если вы хотите включить их в сюжет, вам нужно преобразовать их в строки.

1
Patrick FitzGerald 22 Фев 2021 в 12:45