根据条件删除行

  • 本文关键字:删除行 条件 pandas
  • 更新时间 :
  • 英文 :


我有这个DataFrame:

pd.DataFrame(
{'name': ['Adam', 'Adam', 'Adam', 'Bill', 'Bill', 'Charlie', 'Charlie', 'Charlie', 'Charlie'],
'message': ['start', 'stuck', 'finish', 'start', 'stuck', 'start', 'stuck', 'finish', 'finish']}
)

,我想删除所有带有消息"卡住"从所有没有消息"finish":

的行中删除
pd.DataFrame(
{'name': ['Adam', 'Adam', 'Bill', 'Bill', 'Charlie', 'Charlie', 'Charlie'],
'message': ['start', 'finish', 'start', 'stuck', 'start', 'finish', 'finish']}
)

所以比尔永远不会"写完",所以他的信息将一直"卡住"。

如果有学生完成了,按student分组并使用any,这里我们希望它恢复到数据框的原始形状,所以我们使用groupby.transform:

>>> sf = df['message'].eq('finish').groupby(df['name']).transform('any')
>>> sf
0     True
1     True
2     True
3    False
4    False
5     True
6     True
7     True
8     True
Name: message, dtype: bool

从那里可以很容易地删除学生尚未完成的消息:

>>> df[~sf | df['message'].ne('stuck'))]
name message
0     Adam   start
2     Adam  finish
3     Bill   start
4     Bill   stuck
5  Charlie   start
7  Charlie  finish
8  Charlie  finish

这将工作:

df[~((df.name.isin(df[df.message=="finish"]['name'])) & (df.message=='stuck'))]

输出:

最新更新