【问题标题】:Pandas Count values across rows that are greater than another value in a different columnPandas 计算大于不同列中另一个值的行中的值
【发布时间】:2018-09-30 14:37:00
【问题描述】:

我有一个这样的熊猫数据框:

        X   a   b   c
        1   1   0   2
        5   4   7   3
        6   7   8   9

我想打印一个名为“count”的列,它输出的值的数量大于第一列中的值(在我的例子中是“x”)。输出应如下所示:

X   a   b   c   Count
1   1   0   2   2
5   4   7   3   1
6   7   8   9   3

我想避免使用“lambda 函数”或“for”循环或任何类型的循环技术,因为我的数据框有大量行。我尝试过这样的事情,但我无法得到我想要的。

df['count']=df [ df.iloc [:,1:] > df.iloc [:,0] ].count(axis=1)

我也试过了

numpy.where()

也没有运气。因此,任何帮助将不胜感激。我也有 nan 作为我的数据框的一部分。所以我想在计算值时忽略它。

提前感谢您的帮助!

【问题讨论】:

    标签: python pandas numpy count rows


    【解决方案1】:

    您可以将ge(>=) 与sum 一起使用

    df.iloc[:,1:].ge(df.iloc[:,0],axis = 0).sum(axis = 1)
    Out[784]: 
    0    2
    1    1
    2    3
    dtype: int64
    

    分配回来后

    df['Count']=df.iloc[:,1:].ge(df.iloc [:,0],axis=0).sum(axis=1)
    df
    Out[786]: 
       X  a  b  c  Count
    0  1  1  0  2      2
    1  5  4  7  3      1
    2  6  7  8  9      3
    

    【讨论】:

    • 哇!非常感谢@Wen。那很快。我有一个后续问题。在我的情况下,我实际上有 2 列“x”和“y”,我需要计算位于两个范围之间的值。那么我可以结合 '.le' 和 '.ge' 并有一个 '&' 运算符吗?这是如何运作的?我知道我应该在我的第一个问题中包含这个。
    • 知道了。如果有人需要这样的解决方案,
    • @sandy 是的,你可以使用 &
    【解决方案2】:
    df['count']=(df.iloc[:,2:5].le(df.iloc[:,0],axis=0).sum(axis=1) + df.iloc[:,2:5].ge(df.iloc[:,1],axis=0).sum(axis=1))
    

    如果有人需要这样的解决方案,您只需将“.le”和“.ge”的输出添加到一行中即可。感谢@Wen 回答我的问题!!!

    【讨论】:

    • 还有@Wen,我可以知道你为什么使用axis = 0作为'le'功能。我理解axis = 1,因为计算需要逐列进行。但是为什么axis=0?
    • 这是按行索引匹配的。 axis=1 他们将搜索列索引匹配并计算匹配时的值
    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2020-11-24
    相关资源
    最近更新 更多