У меня есть 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.
Заранее спасибо!
Вы должны использовать countplot
как countplot
ниже:
df = pd.melt(testdf)
sns.countplot(data=df.loc[df['value']!="NO"], x='variable', hue='value')
Выход:
Как указывает @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()