python - Pandas groupby 在保留多个聚合的组内排序并用 facet 可视化它
问题描述
我有这个示例数据集
products = ["A", "B", "C", "D"]
stores = ["store1", "store2", "store3"]
n = 30
product_list = [products[i] for i in np.random.randint(0, len(products), n)]
store_list = [stores[i] for i in np.random.randint(0, len(stores), n)]
rating_list = np.random.random(n) * 5
sales_list = np.random.random(n) * 10000
df = pd.DataFrame(
{'store': store_list,
'product': product_list,
'sales': sales_list,
'rating': rating_list})
然后总结销售额
df_1=df.groupby(['store','product']).agg({'sales':['sum']})
df_1
并在维护商店的同时以最高销售额订购
df_2 = df_1.groupby(level=0, group_keys=False).apply(
lambda x: x.sort_values(('sales', 'sum'), ascending=False))
df_2
我怎样才能按商店分面,所以生成的可视化如下所示?
解决方案
您应该重置最后一段中的索引:
df_2 = df_1.groupby(level=0, group_keys=False).apply(
lambda x: x.sort_values(('sales', 'sum'), ascending=False)).reset_index()
然后你可以用seaborn.FacetGrid
:
g = sns.FacetGrid(df_2, col = 'store')
g.map(sns.barplot, 'product', 'sales')
plt.show()
推荐阅读
- amazon-web-services - AWS Cloudformation - 挂载到现有文件系统
- php - 具有热链接保护和低内存使用率的 Laravel 下载响应
- vba - Datediff 不适用于 VBA 查询以在 Excel 中访问
- anaconda - Spyder 终端在哪里(是的,我下载了它)?
- time - ISO-8601 UTC 和 Unix 时间戳之间是否存在一对一关系?
- javascript - 用于片段的 VSCode 文档选择器
- ruby-on-rails - 安装 Mysql 2 gem 失败
- matlab - 如何解释这些用 MATLAB 编写的命令行?
- java - 让用户通过文本字段设置默认保存目录
- python - 如何将多索引数据框转换为复杂结构?