【问题标题】:pandas multi-index select data by logical arrays熊猫多索引按逻辑数组选择数据
【发布时间】:2017-07-03 20:20:40
【问题描述】:

这里我有一个数据框

import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(100).reshape(20,5), columns=list('abcde'))
data = data.set_index(['a', 'b'])
print(data.head())
        c   d   e
a  b
0  1    2   3   4
5  6    7   8   9
10 11  12  13  14
15 16  17  18  19
20 21  22  23  24

如何通过逻辑判断选择数据使用 loc 函数? 像这样:a 1

【问题讨论】:

    标签: python pandas indexing conditional-statements multi-index


    【解决方案1】:

    1) 直接在多索引DF 的索引名称上使用query 来执行布尔索引:

    data.query("a < 20 & b > 1")
    

    2) 如果您想事先有一个布尔掩码并在以后基于此子集 DF,请使用 eval

    bool_mask = data.eval("a < 20 & b > 1")
    data[bool_mask]
    

    两种情况的结果 o/p:

    【讨论】:

      【解决方案2】:

      您可以将Index.get_level_valuesboolean indexing 一起使用:

      mask = (data.index.get_level_values('a') < 20) & (data.index.get_level_values('b') > 1)
      print (mask)
      [False  True  True  True False False False False False False False False
       False False False False False False False False]
      
      print (data[mask])
              c   d   e
      a  b             
      5  6    7   8   9
      10 11  12  13  14
      15 16  17  18  19
      

      DataFrame.query 的解决方案与另一个答案类似,只是将&amp; 更改为and

      print (data.query("a < 20 and b > 1"))
              c   d   e
      a  b             
      5  6    7   8   9
      10 11  12  13  14
      15 16  17  18  19
      

      Query python versus pandas syntax comparison.

      【讨论】:

        猜你喜欢
        • 2019-09-20
        • 2017-02-23
        • 2017-10-30
        • 2017-03-12
        • 2018-05-28
        • 2020-08-18
        • 2014-10-01
        • 2018-09-27
        • 1970-01-01
        相关资源
        最近更新 更多