Python 根据列值及其前两行选择一行

Python 根据列值及其前两行选择一行,python,pandas,data-processing,Python,Pandas,Data Processing,我想根据列值及其前两行选择一行。例如,在给定的数据集中(在图片上),我想根据“E”列值“VK”和所选行的前两行选择行。因此,我们应该得到如下数据集: +---+---+---+---+----+ | A | B | C | D | E | +---+---+---+---+----+ | 1 | 2 | 3 | 4 | VK | | 1 | 4 | 6 | 9 | MD | | 2 | 5 | 7 | 9 | V | | 2 | 3 | 5 | 8 | VK | | 2 | 3 | 7 |

我想根据列值及其前两行选择一行。例如,在给定的数据集中(在图片上),我想根据“E”列值“VK”和所选行的前两行选择行。因此,我们应该得到如下数据集:

+---+---+---+---+----+
| A | B | C | D | E  |
+---+---+---+---+----+
| 1 | 2 | 3 | 4 | VK |
| 1 | 4 | 6 | 9 | MD |
| 2 | 5 | 7 | 9 | V  |
| 2 | 3 | 5 | 8 | VK |
| 2 | 3 | 7 | 9 | V  |
| 1 | 1 | 1 | 1 | N  |
| 0 | 1 | 6 | 9 | V  |
| 1 | 2 | 5 | 7 | VK |
| 1 | 7 | 8 | 0 | MD |
| 1 | 5 | 7 | 9 | VK |
| 0 | 1 | 6 | 8 | V  |
+---+---+---+---+----+

首先,我们需要过滤数据帧直到最后一个VK,然后使用
cumsum
创建groupkey,然后执行
groupby
head

+---+---+---+---+----+
| A | B | C | D | E  |
+---+---+---+---+----+
| 1 | 2 | 3 | 4 | VK |
| 1 | 4 | 6 | 9 | MD |
| 2 | 5 | 7 | 9 | V  |
| 2 | 3 | 5 | 8 | VK |
| 2 | 3 | 7 | 9 | V  |
| 1 | 1 | 1 | 1 | N  |
| 1 | 2 | 5 | 7 | VK |
| 1 | 7 | 8 | 0 | MD |
| 1 | 5 | 7 | 9 | VK |
+---+---+---+---+----+

不要在图片中张贴您的数据。我将更改它。我不知道it@ShamsulMasum如果你能在这个问题上帮助我@YOBEN_S,请用不同的行保存它
df=df.loc[:df.E.eq('VK').loc[lambda x : x].index.max()]
df=df.iloc[::-1].groupby(df.E.eq('VK').iloc[::-1].cumsum()).head(3).sort_index()
df
Out[102]: 
   A  B  C  D   E
0  1  2  3  4  VK
1  1  4  6  9  MD
2  2  5  7  9   V
3  2  3  5  8  VK
5  1  1  1  1   N
6  0  1  6  9   V
7  1  2  5  7  VK
8  1  7  8  0  MD
9  1  5  7  9  VK