Python 删除多个_条件为真的行

Python 删除多个_条件为真的行,python,pandas,Python,Pandas,我有一个df,里面有950行。让我们假设这些列是时间戳,数量,事件,文件。这是df的一个很好的近似值。我想: 选择事件为此事件且文件为此文件 如果该行与文件为我的文件且数量匹配的行具有相同的时间戳,则删除该行 我该怎么做?真的很挣扎。我不知道该怎么办 编辑: 示例数据: timestamp, event, quantity, file 2018-10-17 02:01:00, slept, 7, base 2018-10-17 02:01:00, slept, 7,

我有一个
df
,里面有950行。让我们假设这些列是
时间戳
数量
事件
文件
。这是
df
的一个很好的近似值。我想:

  • 选择
    事件
    此事件
    文件
    此文件
  • 如果该行与
    文件
    我的文件
    数量
    匹配的行具有相同的
    时间戳
    ,则删除该行
我该怎么做?真的很挣扎。我不知道该怎么办

编辑:

示例数据:

timestamp,  event,  quantity,   file
2018-10-17 02:01:00,    slept,  7,  base
2018-10-17 02:01:00,    slept,  7,  temp
2018-10-17 02:01:00,    slept,  9,  base
2018-10-17 02:04:00,    studied,    5,  temp
2018-10-17 02:04:00,    farted, 7,  temp
2018-10-17 02:04:00,    drank,  1,  base
2018-10-17 02:04:00,    exercised,  8,  base
2018-10-17 02:04:00,    slept,  7,  base
例如,我将始终保留与file
base
相关的记录。这是我想保留的偏见,因为这些记录无法删除。我想从任何其他
文件
中删除任何非
的记录,例如此处
temp
,其中
时间戳
事件
与任何与
相关的记录相同(时间戳相同)但仅当
数量
基础
中的条目相同时(时间戳相同)

因此,在这个示例数据中,我希望代码识别第二个条目并删除它,因为数量
7
base
的另两个条目中的一个相同


代码不会从02:04:00删除任何内容,因为没有具有相同时间戳和
event
字符串的行(事件都是唯一的)。

我认为有很多方法可以解决它。这是我的示例代码供您参考

import pandas as pd
from pandas.compat import StringIO
from pprint import pprint

text = """
timestamp,event,quantity,file
2018-10-17 02:01:00,slept,7,base
2018-10-17 02:01:00,slept,7,temp
2018-10-17 02:01:00,slept,9,base
2018-10-17 02:04:00,studied,5,temp
2018-10-17 02:04:00,farted,7,temp
2018-10-17 02:04:00,drank,1,base
2018-10-17 02:04:00,exercised,8,base
2018-10-17 02:04:00,slept,7,base
"""

df =pd.read_csv(StringIO(text))
print("original dataframe is")
pprint(df)

qty = 7
my_file = 'temp'
my_event = 'slept'
cols =["event","quantify","file"]
qty_check = grp["quantity"].transform(lambda x: x==qty)
evt_check = grp["event"].transform(lambda x: x==my_event)

file_check = grp["event"].transform(lambda x: x==my_file)
combined_check = evt_check & qty_check & file_check
print("\ndropped dataframe is")   
pprint(df[combined_check])
psl也参考groupby/transform部分。
注意:您也可以找到过滤器功能。但据我所知,我可以过滤组而不是组中的行

你能举一个小例子说明你想要实现什么吗?可能是@KaranRazdan的重复-我已经用示例数据更新了。@macaw_9227-我的问题不等于那个问题。@junky叔叔,不完全一样,但非常相似,这个问题的最上面的答案将解决你的问题(如果你一个接一个地执行两个步骤),你只需要过滤掉带有“sleep”和“base”的行。这不包括我所描述的逻辑。例如,代码需要
import datetime
在其中比较
timestamp
值。感谢你的努力,但这不是我想要的。原来的一个不符合逻辑。我已经更新了。是否可以使用
时间戳上的
groupby()
更新代码,然后执行
组合检查