我在数据下面:我需要删除所有具有组合的行(ColX =' F'和ColY =' Y')。 我按照以下答案建议尝试以下不同的代码。
df = df [(df.ColX!=' F')&(df.ColY!=' Y')] 但是这段代码正在删除所有行(ColX = P和ColY = Y)以及(ColX = F和ColY = Y)。我需要在我的数据中使用(ColX = P和ColY = Y)行。
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)行。
任何投入都受到高度赞赏。谢谢!
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
答案 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")) ]