首页 > 解决方案 > 当总数不是100%时如何计算百分比?

问题描述

我对 pandas 和 matplotlib 很陌生。

我应用了一份问卷,在某个问题中,人们被问到他们使用的社交网络。选项包括 Facebook、Instagram、Twitter 等。他们可以选择的不仅仅是一个选项。

我想组织这些数据来绘制条形图。我使用了以下代码:

listsocial = df["SocialNetworks"].str.split(', ', expand=True)

listsocial.head()

listsocial = 100*listsocial.stack().value_counts(normalize=True)

进而:

sns.set(font_scale=1.4)

ax = listsocial.plot(kind='bar', figsize=(15,7), color=('#009C3B'), grid=True)
ax.yaxis.set_major_formatter(mtick.PercentFormatter(decimals=False))
plt.xticks(rotation=80)
plt.suptitle('Most used social networks', fontsize=20)
plt.xlabel('Social network', fontsize=14, labelpad=20)
plt.ylabel('Respondents\n(%)', fontsize=14, labelpad=20)

plt.show()

但是,结果没有考虑到人们可以回答多个选项的事实,因此总数不应不是 100%。我希望图表显示如下数据:70% 使用 Facebook,60% 使用 Instagram,等等。

提前致谢。

标签: pythonpandasmatplotlib

解决方案


在这种情况下,拆分和堆叠不是要走的路。

我将为每个感兴趣的社交网络创建单独的列,并分配True它是否包含在字符串中(一种单热编码器)

social_networks = pd.DataFrame()
for sn in ['Facebook', 'Twitter', ...]:
    social_networks[sn] = df['SocialNetworks'].str.contains(sn)

然后你可以得到百分比

social_networks = social_networks.mean()

推荐阅读