python - 如何为熊猫分组特征绘制堆积条形图?
问题描述
我有以下数据框:
Part_Number Serial_Number Timestamp Feature Machine Tool Rework
PN1 100 9/9/2020 8:26 FEAT_FN_H30 H10 93 1
PN1 101 9/9/2020 9:05 FEAT1_FN_H12 G3 85 2
PN1 102 9/9/2020 9:29 FEAT_FN_H23 H4 81 1
PN1 103 9/9/2020 10:53 FEAT1_FN_H15 H7 24 3
PN1 104 9/9/2020 10:53 FEAT1_FN_H17 H7 24 3
PN1 105 9/9/2020 10:53 FEAT1_FN_H19 24 1
PN1 106 9/9/2020 12:03 FEAT1_LF_LOC_BE F7 6 2
PN1 107 9/9/2020 12:03 FEAT1_LF_LOC_FN 12
PN1 108 9/9/2020 12:33 FEAT_FN_H42 93 2
PN1 109 9/9/2020 12:33 FEAT_FN_H43 H10 83 1
PN1 110 9/9/2020 12:33 FEAT_FN_H44 H10 83 1
PN1 111 9/9/2020 12:33 FEAT_FN_H45 H10 83 1
PN1 112 9/9/2020 12:33 FEAT_FN_H46 H10 83 1
我需要的是一个条形图,其中包含为每个功能执行的返工总和。
然后,我需要根据对该功能执行这些返工的机器来分解该条。我试图上传一张我正在寻找的照片,但一直收到错误消息。
解决方案
pandas.DataFrame.groupby
所需的功能并聚合sum
.unstack
DataFrame
从长格式到宽格式分组。- 移除拆叠时创建的多级列名的第 0 级
- 绘制堆积条,用
pandas.DataFrame.plot
pandas.DataFrame.plot.bar
- 如果您有很多
'Feature'
,请使用.barh
水平条,figsize
根据需要进行调整,然后更改plt.xlabel('Rework')
为ylabel
.
import pandas as pd
import matplotlib.pyplot as plt
# read data
df = pd.read_csv('test.csv')
# display(df)
Part_Number Serial_Number Timestamp Feature Machine Tool Rework
0 PN1 100 9/9/2020 8:26 FEAT_FN_H30 H10 93.0 1
1 PN1 101 9/9/2020 9:05 FEAT1_FN_H12 G3 85.0 2
2 PN1 101 9/9/2020 9:05 FEAT1_FN_H12 G3 85.0 3
3 PN1 101 9/9/2020 9:05 FEAT1_FN_H12 G4 85.0 2
4 PN1 102 9/9/2020 9:29 FEAT_FN_H23 H4 81.0 1
5 PN1 103 9/9/2020 10:53 FEAT1_FN_H15 H7 24.0 3
6 PN1 104 9/9/2020 10:53 FEAT1_FN_H17 H7 24.0 3
7 PN1 105 9/9/2020 10:53 FEAT1_FN_H19 NaN 24.0 1
8 PN1 106 9/9/2020 12:03 FEAT1_LF_LOC_BE F7 6.0 2
9 PN1 107 9/9/2020 12:03 FEAT1_LF_LOC_FN NaN NaN 12
10 PN1 108 9/9/2020 12:33 FEAT_FN_H42 NaN 93.0 2
11 PN1 109 9/9/2020 12:33 FEAT_FN_H43 H10 83.0 1
12 PN1 110 9/9/2020 12:33 FEAT_FN_H44 H10 83.0 1
13 PN1 111 9/9/2020 12:33 FEAT_FN_H45 H10 83.0 1
14 PN1 112 9/9/2020 12:33 FEAT_FN_H46 H10 83.0 1
# groupby and sum
dfg = df.groupby(['Feature', 'Machine']).agg({'Rework': sum}).unstack()
# fix column names
dfg.columns = dfg.columns.droplevel(0)
# sort the index by the sum of the rows
dfg = dfg.reindex(dfg.sum(axis=1).sort_values(ascending=False).index)
# plot the top 5
dfg.head().plot.bar(stacked=True, figsize=(8, 5), grid=True)
plt.ylabel('Rework')
plt.legend(title=dfg.columns.name, bbox_to_anchor=(1.05, 1), loc='upper left')
测试数据
- 添加了额外的数据进行测试,因为没有一个
'Feature'
以上的例子'Machine'
。
Part_Number,Serial_Number,Timestamp,Feature,Machine,Tool,Rework
PN1,100,9/9/2020 8:26,FEAT_FN_H30,H10,93,1
PN1,101,9/9/2020 9:05,FEAT1_FN_H12,G3,85,2
PN1,101,9/9/2020 9:05,FEAT1_FN_H12,G3,85,3
PN1,101,9/9/2020 9:05,FEAT1_FN_H12,G4,85,2
PN1,102,9/9/2020 9:29,FEAT_FN_H23,H4,81,1
PN1,103,9/9/2020 10:53,FEAT1_FN_H15,H7,24,3
PN1,104,9/9/2020 10:53,FEAT1_FN_H17,H7,24,3
PN1,105,9/9/2020 10:53,FEAT1_FN_H19,,24,1
PN1,106,9/9/2020 12:03,FEAT1_LF_LOC_BE,F7,6,2
PN1,107,9/9/2020 12:03,FEAT1_LF_LOC_FN,,,12
PN1,108,9/9/2020 12:33,FEAT_FN_H42,,93,2
PN1,109,9/9/2020 12:33,FEAT_FN_H43,H10,83,1
PN1,110,9/9/2020 12:33,FEAT_FN_H44,H10,83,1
PN1,111,9/9/2020 12:33,FEAT_FN_H45,H10,83,1
PN1,112,9/9/2020 12:33,FEAT_FN_H46,H10,83,1
推荐阅读
- java - Spring 集成事件监听器入站适配器
- r - 大型数据集 R 的两列之间的部分字符串匹配
- sql - 优化查询 - MS SQL Server
- hubot - Hubot错误识别单个用户
- javascript - 使用 onclick 事件的响应式向下切换菜单
- logging - 使用 Intellij 远程调试从应用程序生成日志
- c++ - C ++:使用另一个类中的参数初始化对象数组
- python-2.7 - 将图像转换为二进制数据
- ios - 将手表应用程序添加到 Flutter iOS 应用程序
- manticore-search - Is json api for search only available for RT indices?