如何根据特定条件过滤重复行

Pri*_*iya 1 python filtering pandas

我有一个看起来像这样的数据框,但有更多的行:

id         status       year
1           yes          2013
1           no           2013
1           yes          2014
3           no           2012
4           yes          2014
6           no           2014
Run Code Online (Sandbox Code Playgroud)

我想过滤数据框,以便如果两行之间的id和year列相同,但状态列不同,则只保留具有"yes"状态的行.如果对于没有与之关联的"是"的id和年份组合存在"否",我仍然希望保留它.这导致我无法仅将状态列过滤为仅包含"是"的行的问题.

这导致我无法仅将状态列过滤为仅包含"是"的行的问题.

生成的数据框应该如下所示,其中第一个数据框的第二行将被取出,因为ID 1和2013年具有与之关联的"是".但是,ID为3和6的行仍然存在,因为没有与这些ID和年份组合关联的是:

id         status       year
1           yes          2013
1           yes          2014
3           no           2012
4           yes          2014
6           no           2014
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 6

您可以计算两个条件:

  1. 一个使用groupby,transform和nunique,和
  2. 另一个与地位有关

或两个掩码,并过滤df:

m1 = df.groupby(['id','year']).status.transform('nunique').eq(1) 
m2 = df.status.eq('yes')
df[m1 | m2]

   id status  year
0   1    yes  2013
2   1    yes  2014
3   3     no  2012
4   4    yes  2014
5   6     no  2014
Run Code Online (Sandbox Code Playgroud)