Python:在第一次出现列值后删除所有行

Python:在第一次出现列值后删除所有行,python,pandas,Python,Pandas,我有一个PANDAS数据框,其中的列具有打开/关闭状态值和排名字段值。在我按秩字段排序之后,在第一次出现“打开”值之后,删除/删除所有行的最佳方式是什么?我只是不知道我应该使用迭代器函数还是基于索引的标准方法。任何建议都很好 编辑:到目前为止,这正是我开始做的 df["Rank", "Status"].sort_values(by="Rank") 我试图完成的输出如下所示: 由此: Rank Status 1 Closed 5 Closed 6 Open 9 Close

我有一个PANDAS数据框,其中的列具有打开/关闭状态值和排名字段值。在我按秩字段排序之后,在第一次出现“打开”值之后,删除/删除所有行的最佳方式是什么?我只是不知道我应该使用迭代器函数还是基于索引的标准方法。任何建议都很好

编辑:到目前为止,这正是我开始做的

df["Rank", "Status"].sort_values(by="Rank")
我试图完成的输出如下所示:

由此:

Rank Status
1    Closed
5    Closed
6    Open
9    Closed
10   Open
为此:

Rank Status
 1    Closed
 5    Closed
 6    Open

您只需在对数据帧进行排序时对其重新编制索引,然后找到“Open”的第一个实例的索引位置,并将数据切片到其中

import pandas as pd
#create dataframe
df = pd.DataFrame({
'Rank' : [5, 1, 10 ,6, 9],   
'Status' : ['Closed', 'Closed', 'Open', 'Closed', 'Open']
})

# sort and reindex
df = df.sort('Rank').reset_index()

#slice to first occurrence of your value
df.loc[: df[(df['Status'] == 'Open')].index[0], :]

答案几乎相同。直接操纵df

df = df[:df[df['Status'] == 'Open'].index[0]]
这将返回值的第一个实例的索引,然后将数据帧切片到该行。

此解决方案(imo)不包括第一次出现
open
(根据OP的要求)的行。因此,我认为它应该是
df[:df[df['Status']=='Open']。索引[0]+1]