Удаление всех строк в фрейме данных pandas ниже строки с определенным значением столбца

#pandas #dataframe #filter

#pandas #фрейм данных #Фильтр

Вопрос:

У меня есть фрейм данных Pandas, который содержит дополнительные данные в последних нескольких строках. Мне нужно идентифицировать строку с определенным значением столбца и удалить все строки, начиная с этой строки и ниже.

Пример фрейма данных:

 Mod            Day           Initials
 1            9/4/18            AV
 2            4/20/19           AV
 3            7/18/17           AV
 4            12/1/13           AV
Program       Title           Amount
Axis          Axis Gig         $35
Rex           Rex Gig          $75
DOM           Triple Z         $15
  

Итак, я хотел бы определить, где фрейм данных имеет «Заголовок» в столбце «День», и удалить эту строку и все строки под ней.

Ответ №1:

Вы можете использовать логическую индексацию с df.where

 s = """Mod,Day,Initials
1,9/4/18,AV
2,4/20/19,AV
3,7/18/17,AV
4,12/1/13,AV
Program,Title,Amount
Axis,Axis Gig,$35
Rex,Rex Gig,$75
DOM,Triple Z,$15"""

df = pd.read_csv(StringIO(s))

# select where your col equals 'Title' then fill all other values with nan
# forward fill all nan values after title and the use boolean indexing
new_df = df[df['Day'].where(df['Day'] == 'Title', np.nan).ffill() != 'Title']

  Mod      Day Initials
0   1   9/4/18       AV
1   2  4/20/19       AV
2   3  7/18/17       AV
3   4  12/1/13       AV
  

Комментарии:

1. Я получаю следующую ошибку: IndexError: однопозиционный индексатор находится вне пределов

Ответ №2:

Вы можете найти индекс и сохранить все только перед этой строкой

 df = df[0:df[df['Day'] == 'Title'].index[0]]
df
  

Вывод

   Mod      Day Initials
0   1   9/4/18       AV
1   2  4/20/19       AV
2   3  7/18/17       AV
3   4  12/1/13       AV
  

Комментарии:

1. Я получаю следующую ошибку: IndexError: однопозиционный индексатор находится вне пределов

2. Я не могу воспроизвести ошибку. Я не знаю, что отличается в вашем фрейме данных. Я использовал предоставленный вами фрейм данных в качестве ваших данных.