python - 每周按计数对枢轴图进行排序
问题描述
绘制以下数据集时:
date = ['2/18/2019','2/18/2019','2/18/2019','2/18/2019','2/25/2019','2/25/2019','2/25/2019','2/25/2019','3/4/2019','3/4/2019','3/4/2019','3/4/2019',
'3/11/2019','3/11/2019','3/11/2019','3/11/2019','3/18/2019','3/18/2019','3/18/2019','3/18/2019']
name = ['P','L','E','N','P','L','E','N','P','L','E','N','P','L','E','N','P','L','E','N']
count = [0,0,0,0,0,0,0,0,1,5,0,0,1,7,1,2,2,7,1,2]
df = pd.DataFrame({'date': date, 'name': name, 'count':count}).sort_values(['date','count'],ascending=[True, False])
我想每周保持订单,即。在每周内,值应按计数排序,例如 3/18 我们应该先有 L,然后是 P 或 N,然后是 E。
但是,旋转后顺序会中断,并且在绘制时会按字母顺序显示数据。有什么方法可以让它在每周内按计数绘制?
piv = df.pivot(index='date', columns='name', values='count')
piv = piv.reset_index(level=piv.index.names)
piv.plot(kind='bar', stacked=True, rot=0, grid=True)
解决方案
列的顺序是条的堆叠方式。如果您的数据透视表中有 E、L、N、P,那将是系列的顺序(当前代码)。您可以更改此顺序,但所有柱将具有相同的顺序。这是一个按字母组计数对条形排序的示例(即 E = 2)
piv = df.pivot(index='date', columns='name', values='count')
piv = piv.reset_index(level=piv.index.names)
cols = ["date"] + piv[list("ELPN")].sum().sort_values(ascending=False).keys().tolist()
piv = piv[cols]
piv.plot(kind='bar', stacked=True, rot=0, grid=True)
我怀疑您希望每个酒吧都有不同的顺序。我不相信 Pandas 可以做到这一点,但它可能可以直接用 matplotlib 完成。
推荐阅读
- php - Laravel 模型关系 - 搜索不起作用
- delphi - 更改 TListView TObjectAppearance 中的数字格式
- reactjs - 使用 PropTypes 定义类型的选项
- c - 读取具有多个条件的数据时如何将while循环保留在函数中?
- react-native - 胜利原生胜利轴没有渲染最后一个y轴值,反应原生
- java - Quarkus Qute Double 带 2 位小数
- python - 计算python中元素组合的频率
- python - 如何查找重复行并在新列中分配 ID
- c++ - 使用类型作为字段时,为什么不能推迟不完整类型(前向声明)的大小计算?
- ubuntu - Ansible 动态库存脚本 - 奇怪的行为