我有一个df,如下所示
a c d
0 ABC 0.4 y
1 ABC 0.3 x
2 DEF 0.3 x
3 DEF 0.2 x
4 DEF 0.5 x
5 DEF 0.4 y
我想按“ c”列对df排序,然后对“ a”列进行分组,然后如果该组的最后一行的“ d” =“ y”列的值删除该组的所有行>
我的预期输出是
a c d
2 DEF 0.2 x
3 DEF 0.3 x
4 DEF 0.4 y
5 DEF 0.5 x
因此,在按列'c'排序后,组'ABC'被删除,成为组d = y中的最后一行,但组'DEF'保留在DEF中的最后一行col d = x
答案 0 :(得分:2)
直接从您的逻辑出发:
mask = (df.sort_values('c') # sort the values by `c`
.groupby('a')['d'] # groupby `a` and look at `d`
.transform('last') # select the last rows
.ne('y') # check if last rows are `y`
.reindex(df.index) # reindex as the original data
)
df = df[mask]
输出:
a c d
2 DEF 0.3 x
3 DEF 0.2 x
4 DEF 0.5 x
5 DEF 0.4 y
答案 1 :(得分:1)
让我们做filter
df=df.groupby('a').filter(lambda x : x.at[x['c'].idxmax(),'d']!='y')
Out[278]:
a c d
2 DEF 0.3 x
3 DEF 0.2 x
4 DEF 0.5 x
5 DEF 0.4 y