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