python - 检查状态是否与昨天相比发生了变化,如果是,则将其显示在新的数据框中
问题描述
每天我都会运行我的代码并测试它是成功还是失败。我把它放在一个数据库中,数据库看起来像这样:
Date Name Color
0 2019-07-18 Project1 blue
1 2019-07-18 Project2 blue
2 2019-07-18 Project3 red
3 2019-07-19 Project1 blue
4 2019-07-19 Project2 red
5 2019-07-19 Project3 red
现在我想显示与昨天相比失败的唯一行
当我运行我的代码时,我现在拥有的是这个输出:
Date Name Color
4 2019-07-19 Project2 red
5 2019-07-19 Project3 red
我试图找到重复项并将其保存在新的数据框中
dfnewfails = df.drop_duplicates(subset='Name', keep='last').query("Color == 'red'")
这是我想要的输出:
print(dfnewfails)
>>> 0 2019-07-19 Project2 red
解决方案
尝试首先过滤boolean indexing
:
df[df['Status'].eq('FAIL')].drop_duplicates(subset='Name',keep='last')
或通过DataFrame.query
:
df.query("Status == 'FAIL'").drop_duplicates(subset='Name', keep='last')
谢谢@piRSquared 的建议-
如果项目先前失败但随后成功,则首先查询将返回失败而不是什么都不返回。
df.drop_duplicates(subset='Name', keep='last').query("Status == 'FAIL'")
编辑:
如果需要另一个条件来测试最后一个值Date
:
last = df['Date'].iloc[-1]
df1 = df.query("Color == 'red' & Date == @last")
print (df1)
Date Name Color
4 2019-07-19 Project2 red
5 2019-07-19 Project3 red
或者:
last = df['Date'].iloc[-1]
df1 = df[df['Color'].eq('red') & df['Date'].eq(df['Date'].iloc[-1])]
print (df1)
Date Name Color
4 2019-07-19 Project2 red
5 2019-07-19 Project3 red
如果今天日期时间需要测试条件:
df['Date'] = pd.to_datetime(df['Date'])
today = pd.Timestamp.today().floor('d')
df1 = df.query("Color == 'red' & Date == @today")
或者:
df1 = df[df['Color'].eq('red') & df['Date'].eq(today)]
print (df)
Date Name Color
4 2019-07-19 Project2 red
5 2019-07-19 Project3 red
推荐阅读
- amazon-dynamodb - Dynamodb 流运动 - 之间发现不完整的哈希范围
- java - 如何将数据从 Angular 10 表单传递到包含字符串和文件/图像的 Spring Boot Rest API?
- php - 如何提交输入数据以及ng2文件上传角度离子
- python - 属性错误:“元组”对象没有属性“值”
- google-maps - 在 initState() 中调用时,颤动的谷歌地图自定义图标不显示
- javascript - 我什么时候使用 HTML 或 Javascript?
- python - 使用 SAN 创建 CSR 的 Python 函数
- php - 在顶级类别上显示父类别名称和子链接
- javascript - 输入未添加到数组(初学者)JavaScript
- r - 如何根据 2 个聚合列从 R 中的另一列中减去 1 列