Панды: морской граф из нескольких колонн

1

У меня есть dataframe с несколькими категориальными столбцами. Я знаю, как делать счетчик, который обычно занимает один столбец. Q: как построить максимальный счет из ВСЕХ столбцов в одном сюжете?

вот примерный информационный кадр, чтобы прояснить вопрос:

import pandas as pd
import numpy as np
import seaborn as sns

testdf=pd.DataFrame(({   'Ahome' :   pd.Categorical(["home"]*10),
                         'Bsearch' : pd.Categorical(["search"]*8 + ["NO"]*2),
                          'Cbuy' : pd.Categorical(["buy"]*5 + ["NO"]*5),
                          'Dcheck' : pd.Categorical(["check"]*3 + ["NO"]*7),


                     } ))
testdf.head(10)
sns.countplot(data=testdf,x='Bsearch');

Последняя строка просто использует обычный счетчик для одного столбца. Я хотел бы иметь категорию столбцов (home, search, buy and check) по оси x и их частоту по оси y.

Заранее спасибо!

Теги:
pandas
seaborn

2 ответа

2
Лучший ответ

Вы должны использовать countplot как countplot ниже:

df = pd.melt(testdf)
sns.countplot(data=df.loc[df['value']!="NO"], x='variable', hue='value')

Выход:

Изображение 174551

  • 0
    Спасибо! Любая идея, как я могу удалить "НЕТ" из значений?
  • 0
    Что вы подразумеваете под удалением «НЕТ» из значений?
Показать ещё 4 комментария
1

Как указывает @HarvIpan, используя melt вы создадите длинный формат данных с именами столбцов в качестве записей. Вызов countplot на этом фреймворке дает правильный график.

В отличие от существующего решения я бы рекомендовал не использовать аргумент hue вообще.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df=pd.DataFrame(({   'Ahome' :   pd.Categorical(["home"]*10),
                         'Bsearch' : pd.Categorical(["search"]*8 + ["NO"]*2),
                          'Cbuy' : pd.Categorical(["buy"]*5 + ["NO"]*5),
                          'Dcheck' : pd.Categorical(["check"]*3 + ["NO"]*7),


                     } ))

df2 = df.melt(value_vars=df.columns)
df2 = df2[df2["value"] != "NO"]
sns.countplot(data=df2, x="variable")
plt.show()

Изображение 174551

  • 0
    Это выглядит также очень хорошо! Не могли бы вы просто отредактировать свой ответ, потому что теперь я предполагаю, что есть некоторые несоответствия между данными вашего примера и вашим графиком (что правильно). Благодарю.
  • 0
    Ой, извини. Это была такая глупая ошибка (я скопировал код из совершенно другой вкладки редактора.) Теперь нужно исправить.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню