绘制Pandas DF通道中联系人ID的频率

时间:2017-12-05 22:43:57

标签: python pandas seaborn

这是我的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之间的频率。

换句话说,这些选项都没有提供我需要的输出。

任何人都可以帮我正确绘制最初给定的数据吗?谢谢!

1 个答案:

答案 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')