【问题标题】:Pandas counting and summing specific conditions熊猫计数和求和特定条件
【发布时间】:2014-01-26 12:38:27
【问题描述】:

pandas 中是否有单个函数来执行 SUMIF(对特定条件求和)和 COUNTIF(从 Excel 计算特定条件的值)的等效项?

我知道有很多多步函数可以用于

例如对于sumif,我可以使用(df.map(lambda x: condition), or df.size()),然后使用.sum()

对于countif,我可以使用(groupby functions 并寻找我的答案或使用过滤器和.count())

是否有简单的一步过程来执行这些功能,您可以输入条件和数据框并获得总和或计数结果?

【问题讨论】:

    标签: python pandas sum


    【解决方案1】:

    您可以先进行条件选择,然后使用sum函数对选择结果进行汇总。

    >> df = pd.DataFrame({'a': [1, 2, 3]})
    >> df[df.a > 1].sum()   
    a    5
    dtype: int64
    

    有多个条件:

    >> df[(df.a > 1) & (df.a < 3)].sum()
    a    2
    dtype: int64
    

    如果你想做COUNTIF,只需将sum()替换为count()

    【讨论】:

    • 如果您有两个或更多不同的列并且需要多个条件,您会怎么做?
    • 只需将第二个示例中选定的列之一更改为另一个列名。
    • 对于多个列,每个唯一值的计数使用df.aggregate(['value_counts])。当这些列具有相同的值时是理想的。您也可以只使用选择列df[list_of_columns].aggregate(['value_counts])
    【解决方案2】:

    我通常在逻辑条件列上使用 numpy sum:

    >>> import numpy as np
    >>> import pandas as pd
    >>> df = pd.DataFrame({'Age' : [20,24,18,5,78]})
    >>> np.sum(df['Age'] > 20)
    2
    

    在我看来,这比上面提出的解决方案略短

    【讨论】:

    • 其实这里不一定要用numpy。你可以sum(df['Age'] &gt; 20)。参数是可迭代的,可以被内置函数获取。
    【解决方案3】:

    您没有提到数据帧的精美索引功能,例如:

    >>> df = pd.DataFrame({"class":[1,1,1,2,2], "value":[1,2,3,4,5]})
    >>> df[df["class"]==1].sum()
    class    3
    value    6
    dtype: int64
    >>> df[df["class"]==1].sum()["value"]
    6
    >>> df[df["class"]==1].count()["value"]
    3
    

    你可以用另一个条件替换df["class"]==1

    【讨论】:

    • 我的代码中也有这个,但是如果你有多个条件,比如我想要df[df["class"]==1].count()["value"]df[df["value"]==2].count()["class"]
    • Jimmy C 提出了多个条件的组合,所以我不会在我的帖子中重复它。你还缺什么吗?
    • 获取计数的更简单方法是len(df[df["class"]==1])
    猜你喜欢
    • 2021-10-12
    • 1970-01-01
    • 2022-09-23
    • 2014-09-26
    • 1970-01-01
    • 2020-01-12
    • 2017-09-05
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多