Python 熊猫的国家

Python 熊猫的国家,python,pandas,Python,Pandas,可以在熊猫中执行MS Excel COUNTIFS吗 我有一个包含4列的数据框,如下所示: project_number crew1 crew2 crew3 0 V58615 EWP None None 1 V58615 EWP Ground Line None 2 V58615 EWP Chipper None 3

可以在熊猫中执行MS Excel COUNTIFS吗

我有一个包含4列的数据框,如下所示:

 project_number        crew1        crew2 crew3
0           V58615          EWP         None  None
1           V58615          EWP  Ground Line  None
2           V58615          EWP      Chipper  None
3           V58615          EWP      Chipper  None
4           V58615  Ground Line         None  None
然后我还有一个是所有项目编号的汇总。是否有任何方法可以执行COUNTIFS的等效操作,以计算如果值V58615包含在另一个摘要列表中,EWP将与值V58615对应多少次?我似乎遇到的问题是基于跨多个列的值。使用if对for循环中单个列中的值执行此任务是可以实现的,但超出此范围的任何操作都会变得困难 下面是我如何尝试计算的:

project_numbers = np.array(vma_list.loc[:, 'Project Number'])
crews = konect_outstanding_tasks[['project_number', 'crew1', 'crew2', 
'crew3']]
 print(vma_list['Project Number'])
 l = np.where(crews == 'EWP',1,0)

 def equipment(crew):
   if crew == 'ewp':
      for x, y in enumerate(crews):
        vma_list.loc[x:, 'EWP'] = np.sum(np.where(crews[y] == 'EWP',1,0))
        print(vma_list)
正如你所看到的,有很多原因导致失败;它返回一个聚合总和,但不会像在Excel中使用总和和计数的组合那样进行求和。如果我相信您首先需要:

然后通过以下方式对每组进行计数:

如果只需要ewp值,则首先比较并按总和计算真值:


你好请花点时间阅读这篇文章,以及如何提供答案,并相应地修改你的问题。这些提示可能也很有用。非常感谢。如果你不介意的话,你能简单地解释一下它是如何工作的吗?因为我尝试使用的代码要复杂得多,也简单得多failed@jasw-你能更具体地说,什么失败了?在我的数据中创建了df1?jezrael您的解决方案基本上是复制的COUNTIF@jasw-您可以添加数据的预期输出吗?@jasw-答案已编辑,请检查
df = konect_outstanding_tasks[['project_number', 'crew1', 'crew2', 'crew3']]

df1 = df.melt('project_number', var_name='a', value_name='v').dropna(subset=['v'])
print (df1)
  project_number      a            v
0         V58615  crew1          EWP
1         V58615  crew1          EWP
2         V58615  crew1          EWP
3         V58615  crew1          EWP
4         V58615  crew1  Ground Line
6         V58615  crew2  Ground Line
7         V58615  crew2      Chipper
8         V58615  crew2      Chipper
df2 = df1.groupby(['project_number','v']).size().reset_index(name='count')
print (df2)
  project_number            v  count
0         V58615      Chipper      2
1         V58615          EWP      4
2         V58615  Ground Line      2
ewp = df1['v'].eq('EWP').sum()
print (ewp)
4