包括前N行过滤器匹配

时间:2019-06-16 04:12:52

标签: python pandas

我有一个加载到数据框中的日志文件。我想过滤此日志以获取日志级别为“错误”的行,并且还包括导致该错误的前N行。

日志数据框:

    Level
=========
1   info 
2   info 
3   info
4   error
5   info 
6   info 
7   info
8   error

经过错误过滤并包括前2行的所需结果

    Level
=========
2   info 
3   info
4   error
6   info 
7   info
8   error

我尝试通过执行以下操作将先前的值添加到每一行:

pd['prev_level_1'] = pd['Level'].shift(1)
pd['prev_level_2'] = pd['Level'].shift(2)
pd['prev_level_3'] = pd['Level'].shift(3)
pd['prev_level_4'] = pd['Level'].shift(4)

然后可以从中运行过滤器。但是这种方法似乎令人费解,并且我还遇到以下错误:

A value is trying to be set on a copy of a slice from a DataFrame.

什么是最好的方法?

1 个答案:

答案 0 :(得分:0)

您可以使用此:

df.groupby(df.loc[::-1,'Level'].eq('error').cumsum()[::-1]).tail(3)

输出:

   Level
2   info
3   info
4  error
6   info
7   info
8  error