如果在python

时间:2017-12-14 21:26:13

标签: python pandas conditional row

我在数据下面:我需要删除所有具有组合的行(ColX =' F'和ColY =' Y')。 我按照以下答案建议尝试以下不同的代码。

  1. df = df [(df.ColX!=' F')&(df.ColY!=' Y')] 但是这段代码正在删除所有行(ColX = P和ColY = Y)以及(ColX = F和ColY = Y)。我需要在我的数据中使用(ColX = P和ColY = Y)行。

  2. mask =(df.ColX ==' F')& (df.ColY ==' Y')   DF [〜掩模] 此代码不会删除我要删除的任何行。

    3.mask =(df.ColX ==' F')| (df.ColY ==' Y') DF [〜掩模] 此代码将删除所有行(ColX = P和ColY = Y)以及(ColX = F和ColY = Y)。我需要在我的数据中使用(ColX = P和ColY = Y)行。

  3. 任何投入都受到高度赞赏。谢谢!

     line_date      ColX       ColY    ColZ   rating        rw    
    
     2007-03-31       P         Y        56     1.000000  56.000000
     2007-03-10       P         Y        67     1.000000  67.000000
     2007-02-10       F         Y        66     1.000000  66.000000
     2007-01-13       2                  83     0.880678  73.096278
     2006-12-23       2         Y        88     0.793033  69.786942
     2006-11-09       F                  52     0.636655  33.106077
     2006-10-22       P                  66     0.581946  38.408408
     2006-09-29       F         Y        70     0.518825  36.317752
    

3 个答案:

答案 0 :(得分:2)

您可以使用DataFrame.query() method

In [20]: df.query("ColX != 'F' or ColY != 'Y'")
Out[20]:
    line_date ColX ColY  ColZ    rating         rw
0  2007-03-31    P    Y    56  1.000000  56.000000
1  2007-03-10    P    Y    67  1.000000  67.000000
3  2007-01-13    2  NaN    83  0.880678  73.096278
4  2006-12-23    2    Y    88  0.793033  69.786942
5  2006-11-09    F  NaN    52  0.636655  33.106077
6  2006-10-22    P  NaN    66  0.581946  38.408408

答案 1 :(得分:1)

试试这个:

mask = (df.ColX == 'F') & (df.ColY == 'Y')
df[~mask]

输出:

    line_date ColX ColY  ColZ    rating         rw
0  2007-03-31    P    Y    56  1.000000  56.000000
1  2007-03-10    P    Y    67  1.000000  67.000000
3  2007-01-13    2  NaN    83  0.880678  73.096278
4  2006-12-23    2    Y    88  0.793033  69.786942
5  2006-11-09    F  NaN    52  0.636655  33.106077
6  2006-10-22    P  NaN    66  0.581946  38.408408

或者,因为我对你的输出应该有点困惑。

mask = (df.ColX == 'F') | (df.ColY == 'Y')
df[~mask]

输出:

    line_date ColX ColY  ColZ    rating         rw
3  2007-01-13    2  NaN    83  0.880678  73.096278
6  2006-10-22    P  NaN    66  0.581946  38.408408

答案 2 :(得分:0)

下面的代码给了我预期的数据集:

filter_df=df[ ~(df['ColY'].str.contains("Y") & df['ColX'].str.contains("F")) ]