matplotlib 按多列独立分组并绘制分布图

vsaztqbk  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(138)

我有一个dataframe,看起来像这样:

user_id          segment                      device         operating_system
0       51958733  small and above                      desktop                     Chrome OS
1       48983182         unfunded                      desktop                     Chrome OS
2       54011662         unfunded                      desktop                     (not set)
3       53932081         unfunded                      desktop                     (not set)
4       51537380         unfunded                      desktop                     Chrome OS
...          ...              ...                          ...                           ...
503657  53898078         unfunded                      desktop                     Macintosh
503658  52169624        long tail                      desktop                     Macintosh
503659  53965505         unfunded                      desktop                     Macintosh
503660  50678194         unfunded                      desktop                     Macintosh
503661  52143912         unfunded                      desktop                     Macintosh

我想找到一种方法来有效地计算每个组的不同用户数(实际上我真实的数据框架中有更多的列/组),并在条形图中绘制输出(或者其他更合适的方法)
我在一个笔记本上工作,现在我正在为不同单元格中的每一列运行以下代码:

groupby_segment = eda_df.groupby('segment').ahid.nunique()
groupby_segment.plot.bar(x="Segment", y="ahid", rot=70, title="Segment Distribution")
plt.show(block=True);

这不是很有效,因为我必须手动创建/更新我的笔记本的每个单元格,此外,它不是很好的可视化,因为每个条形图是分开的。我想让他们“分组”到同一个可视化中。我也想有这显示为一个比率,而不是一个简单的不同计数。

2g32fytz

2g32fytz1#

import matplotlib.pyplot as plt

fig = plt.subplots()

# Adjust the distance between two graphs.
plt.subplots_adjust(bottom = 0.8, top = 2.6)

# Extracting the column names
columns = eda_df.columns
for i in range(1, len(columns)):
    ax = plt.subplot(len(columns),1,i)
    y = eda_df.groupby(columns[i]).count()['user_id']
    ax.bar(y.index,y)

您可以使用“ax.plot”或here中的其他函数来绘制不同的图形。
注意-它将为所有列创建相同的图形。

相关问题