这是我的Pandas DF结构:
Id channel
0 0140268216898719 RIA
2 022427195461267 Wire
3 023552004060340 Ind
更多列不重要,数据更多。
我希望使用seaborn绘制直方图来显示每个频道的contactId频率,但是我无法忍受无论我尝试的是什么。
我看到它的方式,我可以按频道对Id进行分组,并有一个条形图(尝试如下):
df=df['channel'].groupby(['Id']).count() #count occurrences of Id for each channel
结果:
channel
Ind 174
RIA 60
Wire 77
和
tips = sns.load_dataset("df")
ax = sns.barplot(x="channel", y="Id", data=tips)
HTTPError:HTTP错误404:未找到
或频道直方图与Id的频率,如下所示:
sns.distplot(df, kde=False, rug=True)
这里我得到的图表是x轴上的Id和y轴上0到2之间的频率。
换句话说,这些选项都没有提供我需要的输出。
任何人都可以帮我正确绘制最初给定的数据吗?谢谢!
答案 0 :(得分:1)
根据文档我正在做tips = sns.load_dataset("df")
,但这只不过是一种从服务器上的csv中提取数据的Seaborn方式。
简单地说明data=df
里面barplot()
从我的DF中提取数据..我添加的应用函数是针对唯一计数而不是仅计数。
df=df.groupby(['channel'])['Id'].apply(lambda x:len(x.unique())).reset_index()
print(df)
sns.set(style='darkgrid')
sns.barplot(x='channel', y='Id', data=df, palette='Set2')
plt.show()
- 编辑 按照计数desc订购,我建议做这样的事情:
result = df.sort_values('Id',ascending=False)
sns.barplot(x='channel', y='id', data=result, palette='Set2')