【问题标题】:How to get number of columns in a DataFrame row that are above threshold如何获取 DataFrame 行中高于阈值的列数
【发布时间】:2021-11-30 00:47:33
【问题描述】:

我有一个简单的 python 3.8 DataFrame,它有 8 列(简单地标记为 0、1、2 等),大约有 8 列。 3500 行。我想要这个 DataFrame 的一个子集,其中每行至少有 2 列高于 1。我不希望单独检查每一列,但能够检查所有列。我知道我可以使用 .any(1) 检查所有列,但我需要至少有 2 列满足阈值,而不仅仅是一个。任何帮助,将不胜感激。示例代码如下:

import pandas as pd

df = pd.DataFrame({0:[1,1,1,1,100],
                1:[1,3,1,1,1],
                2:[1,3,1,1,4],
                3:[1,1,1,1,1],
                4:[3,4,1,1,5],
                5:[1,1,1,1,1]})

我认为稍后进行排序/过滤的最简单方法是在 df[9] 末尾创建另一个包含计数的列:

df[9] = df.apply(lambda x: x.count() if x > 2, axis=1)

这段代码不起作用,但我感觉它很接近?

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    lambda中x的值是一个Series,可以这样索引。

    df[9] = df.apply(lambda x: x[x > 2].count(), axis=1)
    

    【讨论】:

    • 这成功了!非常感谢!!
    【解决方案2】:
    df[(df>1).sum(axis=1)>=2]
    

    解释:

    • (df>1).sum(axis=1) 给出了该行中大于 1 的列数。
    • 然后使用 >=2 过滤至少有 2 列满足条件的行 - 我们按照上一个项目符号中的说明计算

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-08
      • 2021-04-11
      • 2021-04-26
      • 1970-01-01
      • 2017-09-01
      • 2021-12-14
      • 2021-11-21
      • 1970-01-01
      相关资源
      最近更新 更多