根据列值对记录进行计数

时间:2020-11-11 05:19:21

标签: python pandas dataframe filter

我有以下df:

ID  Col1 Col2 Col3
1    A    NB    C
2    A    NB    C 
3    NS   B     NC
4    NS   NB    NC
5    NS   B     NC
6    NS    B     C

我正在尝试根据它们的值来获取每一列的计数。

Col1中有多少个“ A”

第2列中有多少个“ B”

Col3中有多少个“ C”

在原始df中,我有很多列和条件。

预期输出:

Col1                Col2            Col3         
TotalCount"A"   TotalCount"B"    TotalCount"C"

因此,我试图获取列的列表并对其进行迭代,但是没有得到预期的结果。 我正在使用jupyternotebook中的熊猫

2 个答案:

答案 0 :(得分:1)

您可以在此处使用df.eq并传递要比较的值列表。

values = ['A', 'B', 'C']
out = df.loc[:, 'Col1':].eq(values).sum()

Col1    2
Col2    3
Col3    3
dtype: int64

答案 1 :(得分:1)

扩展@ Ch3ster的答案以匹配预期的输出:

WITH cte
AS
    (
        SELECT
            *
            , waitingTime AS TotalWaitingTime
        FROM
            waitingTime
        UNION ALL
        SELECT
            w.*
            , TotalWaitingTime + w.waitingTime
        FROM
            waitingTime w
            JOIN cte
                ON w.ParentObject = cte.Object
    )
SELECT
    object
    , ParentObject
    , waitingTime
    , MAX(TotalWaitingTime) TotalWaitingTime
FROM
    cte
GROUP BY
    object
    , ParentObject
    , waitingTime
GO