我正在使用中型数据集,我有三列,部门名称,电子邮件和完成
我的最终目标是用大熊猫绘制这些数据,所以我试图找出最好的方法
我使用数据透视表完成了这项工作,但我需要计算两个包含部门名称的内容。首先是该部门内的员工人数,以及该部门内有多少人完成培训(然后我打算用这些数据做一个条形图)
例如
Finance email6@domain.com Complete
IT email1@domain.com
IT email2@domain.com Complete
IT email3@domain.com Complete
Accounting email4@domain.com
Accounting email5@domain.com Complete
Accounting email6@domain.com Complete
所以IT的输出将有3名员工,2名完成培训
我想知道IT中有多少人,有多少人在IT,财务,会计等方面完成了这项工作。
有一种简单的方法吗?
答案 0 :(得分:1)
您可以将groupby与聚合
一起使用df.groupby('department name').completion.agg({'Total_Employees':'size', 'Completed_training':'count'})
Total_Employees Completed_training
department name
Accounting 3 2
Finance 1 1
IT 3 2
作为size的想法返回组的大小,而count返回nonNaN值的计数。
要创建条形图,您只需使用pandas plot()
即可df.groupby('department name').completion.agg({'Total_Employees':'size', 'Completed_training':'count'}).plot(kind = 'bar')
编辑:
鉴于列名['部门','电子邮件','完成'],代码将
df.groupby('Department').Completion.agg({'Total_Employees':'size', 'Completed_training':'count'}).plot(kind = 'bar')
答案 1 :(得分:1)
你在找这样的东西吗?
department = ['Finance', 'IT', 'IT', 'IT', 'Accounting', 'Accounting', 'Accounting']
status = ['Complete', 'Incomplete', 'Complete', 'Complete', 'Incomplete', 'Complete','Complete']
email = ['email6@domain.com',
'email1@domain.com',
'email2@domain.com',
'email3@domain.com',
'email4@domain.com',
'email5@domain.com',
'email6@domain.com']
df101 = pd.DataFrame({'Dep' : department, 'Email': email, 'Status': status})
grouped = df101.groupby(['Dep', 'Status']).count().fillna(0)
# output
Email
Dep Status
Accounting Complete 2
Incomplete 1
Finance Complete 1
IT Complete 2
Incomplete 1
grouped.unstack().plot.bar(stacked = True)
#output