首页 > 解决方案 > 检查状态是否与昨天相比发生了变化,如果是,则将其显示在新的数据框中

问题描述

每天我都会运行我的代码并测试它是成功还是失败。我把它放在一个数据库中,数据库看起来像这样:

         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

标签: pythonpandasdataframe

解决方案


尝试首先过滤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

推荐阅读