Python 熊猫的国家
可以在熊猫中执行MS Excel COUNTIFS吗 我有一个包含4列的数据框,如下所示: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
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