Pandas Dataframes值在aggfunc=sum的少数列上计数

2024-10-01 15:43:13 发布

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

我有一个.csv数据集被正确导入、清理、按要求设置NA值等,即(数据集大得多-名称可能包含相同的名称和日期)

NAME    SHIFT  DEP1  DEP2  DEP3  DAY
COLLINS AM     1     1     0.5   01/02/2016
JOHNS   PM     0.5   NA    0.5   02/02/2016
SMITH   AM     1     0.5   NA    01/02/2016
RUBBER  AM     NA    1.5   1     03/02/2016
COLLINS PM     NA    1     NA    02/02/2016

它显示超时次数和长度。我需要实现的是统计所有部门的早班或下午班员工加班的次数。
例如(如上表所示)
早班有7次加班,下午3点。我不想知道谁,什么时候,为什么-无关紧要。
我尝试过pivot表、count、values\u count等,每次收到带有嵌套列标题的整个数据帧时。 我是否应该使用额外的pyton魔术,迭代每个DEP-count非NA值,然后将它们相加并按SHIFT分组?
我很抱歉这个问题的风格,但熊猫文档有点模糊,我是这个主题的初学者 到目前为止,我发现将数据集导入Excel要容易得多,在2分钟内我就得到了我需要的答案:(。在熊猫身上肯定有更好的方法来做到这一点:)

编辑1

所有这些方法都返回一个包括NA值的计数。。。:(

编辑2

我已经解决了这个问题——为什么你的代码notnull()会删除NA,但是在我的pandas中,它实际上什么都不做(我得到的数据帧只有真值)。。。在


Tags: csv数据方法name名称编辑shiftcount
1条回答
网友
1楼 · 发布于 2024-10-01 15:43:13

您可以使用^{}创建掩码,然后使用双sum^{}第一个是{a3},第二个是{a4}:

print (df[['DEP1','DEP2','DEP3' ]].notnull())
    DEP1   DEP2   DEP3
0   True   True   True
1   True  False   True
2   True   True  False
3  False   True   True
4  False   True  False

print (df[['DEP1','DEP2','DEP3' ]].notnull().groupby([df.SHIFT]).sum())
       DEP1  DEP2  DEP3
SHIFT                  
AM      2.0   3.0   2.0
PM      1.0   1.0   1.0

df = df[['DEP1','DEP2','DEP3' ]].notnull().groupby([df.SHIFT]).sum().sum(axis=1)
print (df)
SHIFT
AM    7.0
PM    3.0
dtype: float64

另一个解决方案(感谢jeremycg )和^{}

^{pr2}$

也可以先按子集选择,然后应用count

print (df[['DEP1','DEP2','DEP3' ]].groupby([df.SHIFT]).count())
       DEP1  DEP2  DEP3
SHIFT                  
AM        2     3     2
PM        1     1     1

df = df[['DEP1','DEP2','DEP3' ]].groupby([df.SHIFT]).count().sum(axis=1)
print (df)
SHIFT
AM    7
PM    3
dtype: int64

相关问题 更多 >

    热门问题