我有一个加载到数据框中的日志文件。我想过滤此日志以获取日志级别为“错误”的行,并且还包括导致该错误的前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.
什么是最好的方法?
答案 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