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