【问题标题】:Get by condition column values按条件列值获取
【发布时间】:2016-10-18 02:05:24
【问题描述】:

我有关注DataFrame:

   A      B
0  1      5
1  2      3
2  3      2
3  4      0
4  5      1

如何通过A 列的条件值获取?

例如所有大于 3 且小于 6 的值。

【问题讨论】:

    标签: python pandas dataframe conditional-statements


    【解决方案1】:

    您可以使用boolean indexing,或者使用间隔端点的条件

    df[(df.A > 3) & (df.A < 6)]
    

    或方便的方法.between(),在幕后转换为上述(因此速度非常慢),您需要注意默认情况下包含限制:

    df[df.A.between(4, 5)] # uses inclusive limits
    

    得到:

       A  B
    3  4  0
    4  5  1
    

    【讨论】:

      【解决方案2】:

      使用between(可以使用参数inclusive=False)和boolean indexing

      print (df[df.A.between(4,5)])
      

      示例:

      df = pd.DataFrame({'A': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5,5: 6}, 
                         'B': {0: 5, 1: 3, 2: 2, 3: 0, 4: 2, 5: 1}})
      print (df)
         A  B
      0  1  5
      1  2  3
      2  3  2
      3  4  0
      4  5  2
      5  6  1
      
      print (df[df.A.between(4,5)]) #default inclusive=True
         A  B
      3  4  0
      4  5  2
      
      print (df[df.A.between(3,6, inclusive=False)])
         A  B
      3  4  0
      4  5  2
      

      时间安排相同:

      df = pd.concat([df]*10000).reset_index(drop=True)
      
      In [427]: %timeit (df[df.A.between(3,6, inclusive=False)])
      The slowest run took 4.72 times longer than the fastest. This could mean that an intermediate result is being cached.
      1000 loops, best of 3: 1.32 ms per loop
      
      In [428]: %timeit (df[(df.A>3) & (df.A<6)])
      1000 loops, best of 3: 1.31 ms per loop
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-28
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多