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
例如,我将始终保留与filebase
相关的记录。这是我想保留的偏见,因为这些记录无法删除。我想从任何其他文件
中删除任何非基
的记录,例如此处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()
更新代码,然后执行组合检查
?