删除多个条件为tru的行

2024-04-19 23:11:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个df,里面有950行。假设列是timestampquantityeventfile。这是df的一个很好的近似值。我想:

  • 选择eventthis_eventfilethis_file的所有行
  • 如果行的timestampfilemy_filequantity匹配的行相同,则删除这些行。你知道吗

我该怎么做?真的很挣扎。我不知道该怎么办。你知道吗

编辑:

示例数据:

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

例如,我将始终保留来自文件base的记录。这是一个偏见,我想保留这些记录不能删除。我想从任何其他file中删除任何不是base的记录,例如这里的temp,其中timestampevent与任何与base(在同一时间戳)相关的记录相同,但仅当quantitybase(在同一时间戳)的条目相同时。你知道吗

因此,在这个示例数据中,我希望代码向下标识第二个条目并删除它,因为数量7与另两个base中的一个相同。你知道吗

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


Tags: 数据代码event示例dfbasemy记录
1条回答
网友
1楼 · 发布于 2024-04-19 23:11:17

我认为有很多方法可以解决这个问题。这是我的示例代码供您参考。你知道吗

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部分。 http://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#transformation 注意:您也可以找到过滤器函数。但据我所知,我可以过滤组而不是组中的行

相关问题 更多 >