2017-10-10 83 views
0

我正在使用一个中等大小的数据集,我有三个栏目,部门名称,电子邮件和完成如何基于组计数?

我的最终目标是用熊猫来绘制这些数据,所以即时尝试找出可能的最佳方式

我已经使用数据透视表完成了这项工作,但我需要计算两个包含部门名称的内容。首先是该部门内的员工和2有多少人完成了部门内部的培训(当时我打算做一个条形图与此数据)

例如数

Finance [email protected] Complete 
IT [email protected] 
IT [email protected] Complete 
IT [email protected] Complete 
Accounting [email protected] 
Accounting [email protected] Complete 
Accounting [email protected] 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 

的想法是大小返回组的大小,而count返回计数nonNaN值。

要创建barplot,你可以简单地使用熊猫图()

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') 
+0

我可以在网页上发布这个吗? – davidjbeiler

+0

是的,这是一个非常标准的解决方案 – Vaishali

+0

你将如何从csv分配变量?我有这个:df = pd.read_excel('C:\\ Users \\ dbeiler \\ Desktop \\ F5 \\ PythonApplication1 \\ PythonApplication1 \\ SANS.xlsx',data = ['Department','Email','完成']) – davidjbeiler

1

您正在寻找这样的事情?

department = ['Finance', 'IT', 'IT', 'IT', 'Accounting', 'Accounting', 'Accounting'] 
status = ['Complete', 'Incomplete', 'Complete', 'Complete', 'Incomplete', 'Complete','Complete'] 
email = ['[email protected]', 
     '[email protected]', 
     '[email protected]', 
     '[email protected]', 
     '[email protected]', 
     '[email protected]', 
     '[email protected]'] 

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 
+0

这是全部来自csv,任何简单的方法来做到这一点,如果顶部行说部门,电子邮件地址和完成? – davidjbeiler

+0

是的,而不是'Dep'和'Status'使用'Department'和'Completion'。也请接受为你工作的答案。 – rko

+0

生病im必须明天尝试 – davidjbeiler