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)
您可以计算两个条件:
groupby,transform和nunique,和或两个掩码,并过滤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)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |