2015-12-08 2 views
1

У меня есть фреймворк PANDAS с столбцами с открытым/закрытым статусом состояния и значением поля ранжирования. После того, как я отсортирую по полю ранга, каким будет лучший способ удалить/удалить все строки после первого появления «открытого» значения? Я просто смущен, если я должен использовать функцию итератора или стандартный индексный подход с PANDAS. Любой совет будет полезен!Python PANDAS: отбросить все строки после первого появления значения столбца

Edit: Это как раз то, что я начал с таким образом далеко

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 
+0

Просьба представить рабочий пример и ожидаемый результат. –

+0

Я добавил некоторые детали сейчас. Извинения за упущение. – Pylander

ответ

2

Вы можете просто проиндексировать кадр данных при сортировке его, а затем найти индекс местоположения первого экземпляра «Открыть» и порезать данные туда ....

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], :] 
+0

Спасибо Вуди. Это именно то, что мне нужно. – Pylander

0

Почти тот же ответ. Манипулирование df напрямую.

df = df[:df[df['Status'] == 'Open'].index[0]] 

Это возвращает индекс первого экземпляра значения, а затем нарезать DataFrame до этой строки.