熊猫按顺序删除行

时间:2018-03-06 18:58:30

标签: python pandas dataframe group-by

给出一个特定的df:

ID Text
1  abc
1  xyz
2  xyz
2  abc
3  xyz
3  abc
3  ijk
4  xyz

我想应用条件where:按ID分组,如果abc存在则删除xyz行。结果将是:

ID Text
1  abc
2  abc
3  abc
3  ijk
4  xyz

通常我会按ID对它们进行分组并应用np.where(...)。但是,我不认为这种方法适用于这种情况,因为它基于行 非常感谢!

2 个答案:

答案 0 :(得分:2)

据我所知,您可以使用groupby + transform对其进行矢量化:

df[~(df.Text.eq('abc').groupby(df.ID).transform('any') & df.Text.eq('xyz'))]

   ID Text
0   1  abc
3   2  abc
5   3  abc
6   3  ijk
7   4  xyz

答案 1 :(得分:2)

我正在使用crosstab

s=pd.crosstab(df.ID,df.Text)
s.xyz=s.xyz.mask(s.abc.eq(1)&s.xyz.eq(1))
s
Out[162]:
Text  abc  ijk  xyz
ID
1       1    0  NaN
2       1    0  NaN
3       1    1  NaN
4       0    0  1.0
s.replace(0,np.nan).stack().reset_index().drop(0,1)
Out[167]: 
   ID Text
0   1  abc
1   2  abc
2   3  abc
3   3  ijk
4   4  xyz