Python 熊猫根据条件筛选行,但始终保留第一行

Python 熊猫根据条件筛选行,但始终保留第一行,python,pandas,dataframe,Python,Pandas,Dataframe,我想删除一些符合某些条件的行,但即使第一行符合该条件,我也不想删除第一行 我尝试使用df.drop函数删除行,但如果第一行满足该条件,它将删除第一行。我不想那样 数据如下所示: Column1 Column2 Column3 1 3 A 2 1 B 3 3 C 4 1 D 5 1 E 6 3 F 我想这样做,如果一行在第2列中的

我想删除一些符合某些条件的行,但即使第一行符合该条件,我也不想删除第一行

我尝试使用df.drop函数删除行,但如果第一行满足该条件,它将删除第一行。我不想那样

数据如下所示:

Column1 Column2 Column3
  1        3      A
  2        1      B
  3        3      C
  4        1      D
  5        1      E
  6        3      F
我想这样做,如果一行在第2列中的值为3,那么就将其删除

我希望新数据如下所示(删除后保留第一行,即使第2列中第一行的值为3):

您可以将“保留第一行”作为删除/保留行的条件的一部分

保留行的条件是
。在代码中,这是

# (condition to drop 3) | (condition to keep 0th row)
df[(df['Column2'] != 3) | (df.index == 0)]

   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E
相反,使用DeMorgan定律,删除行的条件是
(df['Column2']==3)和(df.index!=0)
。然后我们反转条件以获得预期输出

df[~((df['Column2'] == 3) & (df.index != 0))]

   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E

假设您的索引是
范围索引
。如果不是,则使用
pd.RangeIndex(len(df))==0作为第二个条件。

我使用的是
重复

df[(~df.Column2.duplicated())|df.Column2.ne(3)]
   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E

这里已经发布了很好的答案,但只是为了方便您。我们还可以使用它对
Nth
3进行排名,我们发现:

df = df[~((df.groupby('Column2').Column2.cumcount() != 0) & (df.Column2 == 3))]

print(df)
   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E

谢谢你的回答。可以再问一个问题吗?假设我在第2列中有其他值,所以基本上我只想保留1并删除任何其他值(不仅仅是3,而是像2、4、5、6、7等等)。@cck1110您可以使用
isin
。更多信息。@cck1110如果您只想保留1,您也可以将您的条件写为
df[(df['Column2']==1)|(df.index==0)]
。@cck1110我确实试过了,它对我有效。也许你的索引不同。试试看:
df2=df[(df['Column2']==1)|(pd.RangeIndex(len(df))==0)]
@cck1110ha!我就知道。这是我以前的回答。下次一定要仔细阅读我的答案:p
df = df[~((df.groupby('Column2').Column2.cumcount() != 0) & (df.Column2 == 3))]

print(df)
   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E