Python Dataframe удаляет строки, которые имеют более 10 вхождений определенного значения - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть следующие данные (просто краткая картинка, цифры продолжаются):

import pandas as pd
df = pd.DataFrame({'Flight Day': ['2018-10-01', '2018-10-01','2018-10-01', '2018-10-01', '2018-10-02','2018-10-02', '2018-10-02', '2018-10-02', '2018-10-03','2018-10-03''2018-10-03','2018-10-03'], 
               'Flight Number': [LX1336, LX1337, LX1472, LX1473, LX1336, LX1337, LX1472, LX1473, LX1336, LX1337, LX1472, LX1473]'STD Departure': [10, 15, 8, 11,10, 15, 8, 14,10, 15, 8, 11], 'Bircher': [2, NaN, 8, 4,3, 2, 3, 1,NaN, 5, 2, 1]'Carac': [NaN, 4, 8, 4,NaN, 2, 3, 4,2, 5, 2, 1]})

Я хочу сохранить только последние 10 вхождений одного и того же "номера рейса" и "вылета STD" и удалитьстроки до последних 10 вхождений.Например, удалите строки для LX1336 (номер рейса) 10 (вылет STD) после того, как у меня есть последние 10 строк, которые уже соответствуют требованиям, следовательно, LX1336 (номер рейса) 10 (вылет STD).У меня есть все номера рейсов в документе CSV, и вылет STD всегда изменяется от 0 до 23, если это помогает.Существует ли короткий и четкий код для этой проблемы?Большое спасибо за Вашу помощь!

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете использовать GroupBy.head для этого:

df.groupby(['Flight Number','STD Departure']).head(10)

Редактировать

В случае, если вы хотите последние 10, просто используйте GroupBy.tail вместо этого, как предлагает @jondiedoop:

df.groupby(['Flight Number','STD Departure']).tail(10)
...