我有一个带有几个分类列的数据框。我知道该怎么做常规绘制一列的计数图。 问:如何在一个图中绘制所有列的最大计数?
下面是一个示例数据框,用于阐明问题:
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');
最后一行仅对一列使用常规计数图。我想在x轴上显示列类别(房屋,搜索,购买和检查),并在y轴上显示它们的频率。
提前谢谢!
答案 0 :(得分:2)
您需要按以下方式使用countplot
:
df = pd.melt(testdf)
sns.countplot(data=df.loc[df['value']!="NO"], x='variable', hue='value')
输出:
答案 1 :(得分: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()