Pandas的国家

2024-06-16 10:40:00 发布

您现在位置:Python中文网/ 问答频道 /正文

可以在熊猫中执行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中使用sum和COUNTIF组合一样进行求和


Tags: projectnonenumbernpexcellistgroundcountifs
1条回答
网友
1楼 · 发布于 2024-06-16 10:40:00

我相信你首先需要{a1}和{a2}:

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值,则首先通过^{}进行比较,然后通过sumTrue进行计数:

ewp = df1['v'].eq('EWP').sum()
print (ewp)
4

相关问题 更多 >