【问题标题】:Selecting all values greater than a number in a panda data frame在熊猫数据框中选择所有大于数字的值
【发布时间】:2020-01-11 15:35:52
【问题描述】:

我有一个这样的数据框,它有 50 多列(从 1963 年到 2016 年)。我希望选择所有人口超过一定数量(比如 6000 万)的国家。现在,当我查看时,所有问题都是关于从单个列中选择值。这不是这里的情况。我也试过 df[df.T[(df.T > 0.33)].any()] 正如答案中所建议的那样。不工作。有什么想法吗?

数据框如下所示:

Country Country_Code   Year_1979  Year_1999   Year_2013
  Aruba          ABW     59980.0      89005    103187.0
 Angola          AGO   8641521.0   15949766  25998340.0
Albania          ALB   2617832.0    3108778   2895092.0
Andorra          AND     34818.0      64370     80788.0

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先通过DataFrame.filter过滤列名中带有Year的列,比较所有行,然后通过DataFrame.any测试每行至少一个匹配值:

    df1 = df[(df.filter(like='Year') > 2000000).any(axis=1)]
    print (df1)
       Country Country_Code  Year_1979  Year_1999   Year_2013
    1   Angola          AGO  8641521.0   15949766  25998340.0
    2  Albania          ALB  2617832.0    3108778   2895092.0
    

    或者将所有没有按位置选择的前 2 个列与 DataFrame.iloc 进行比较:

    df1 = df[(df.iloc[:, 2:] > 2000000).any(axis=1)]
    print (df1)
       Country Country_Code  Year_1979  Year_1999   Year_2013
    1   Angola          AGO  8641521.0   15949766  25998340.0
    2  Albania          ALB  2617832.0    3108778   2895092.0
    

    【讨论】:

    • 谢谢。完美运行。 (like='Year') 做什么?和“;”在 iloc one 中的 2 之后..这是否意味着它将选择 second-1 之后的所有列?
    • @RakeshGulati - filter 检查列名,如果找到 Year,则返回所有包含 Year 的列。 iloc 函数选择省略前 2 的所有列,此处为 CountryCountry_Code
    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    相关资源
    最近更新 更多