【问题标题】:Searching in data set and return values based on some criteria with Python使用 Python 根据某些条件在数据集中搜索并返回值
【发布时间】:2017-09-29 15:01:41
【问题描述】:

我需要查看我的数据集并找到满足特定条件的所有值。我试过pandas.where(cond),它只接受一个条件。

例如考虑以下数据集:

a    b    c     d

1    2    3     899

4    5    -344  21

7    8      9   10

我需要这个结果:0< data.values and data.values <30

a    b    c      d

1    2    3      Nan

4    5     Nan   21

7    8      9   10

大部分脚本返回满足条件的行或列。 但是,我需要每列和每行中的其余值。例如,我不想在第一排输掉 2 和 3,在第二排输掉 4 和 5。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    创建boolean DataFrame 并应用boolean indexing 或使用where'invert conditions' - <>=><=

    m = (df >= 0) & (df <= 30)
    print (m)
          a     b      c      d
    0  True  True   True  False
    1  True  True  False   True
    2  True  True   True   True
    
    df = df[m]
    #alternatively
    #df = df.where(m)
    print (df)
       a  b    c     d
    0  1  2  3.0   NaN
    1  4  5  NaN  21.0
    2  7  8  9.0  10.0
    

    Numpy 解决方案:

    df = pd.DataFrame(np.where(m, df, np.nan), index=df.index, columns=df.columns)
    print (df)
         a    b    c     d
    0  1.0  2.0  3.0   NaN
    1  4.0  5.0  NaN  21.0
    2  7.0  8.0  9.0  10.0
    

    或使用mask:

    m = (df < 0) | (df > 30)
    df = df.mask(m)
    print (df)
    
       a  b    c     d
    0  1  2  3.0   NaN
    1  4  5  NaN  21.0
    2  7  8  9.0  10.0
    

    【讨论】:

    • 有什么办法可以通过特定条件屏蔽上面的列吗?我的意思是,对于每一列,检查特定条件并更新该列等等..
    • 我想帮忙,但现在我要去睡觉了。因此,最好的方法是使用示例数据、所需输出和一些代码创建新问题,以及您尝试的内容。祝你好运!
    【解决方案2】:

    这可以使用二进制表达式(可以是复合表达式)作为选择标准来完成。 Pandas 重载了用于数组下标的 dunder(双下划线)函数以采用二进制表达式。使用它的一个常见问题是它 不是 一个逻辑表达式,因此当它是复合表达式时,您需要在表达式中使用位运算符 &amp;|。这些运算符比相等和比较运算符(例如==&gt;&gt;=)绑定更紧密,因此您需要将比较放在括号内。

    我相信@jezrael 给出的答案会奏效。这只是对她/他提供的内容的解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2012-04-26
      • 2021-12-28
      • 2011-05-13
      • 2020-04-29
      • 2020-11-15
      相关资源
      最近更新 更多