Удалить строки в Dataframe выше медианы по условию

Всем добрый день столкнулся с проблемой

Есть датафрейм с перечнем каталожных номеров для авто:

df = pd.DataFrame({'partnumber': '8K0805594L 8K0805594L 8K0805594L 5181109000 5181109000 5181109000 5181109000'.split(),
                    'oem': 'VAG VAG VAG SsangYong SsangYong SsangYong SsangYong'.split(),
                    'price': [13488, 12400, 8000, 9000, 7500, 4000, 2000]})

    partnumber  oem price
0   8K0805594L  VAG 13488
1   8K0805594L  VAG 12400
2   8K0805594L  VAG 8000
3   5181109000  SsangYong   9000
4   5181109000  SsangYong   7500
5   5181109000  SsangYong   4000
6   5181109000  SsangYong   2000

Подскажите пожалуйста можно ли для каждого каталожного номера (partnumber) удалить строки, которые выше медианного значения поля (price)?

Чтобы получилось примерно вот так:

    partnumber  oem price
1   8K0805594L  VAG 12400
2   8K0805594L  VAG 8000
5   5181109000  SsangYong   4000
6   5181109000  SsangYong   2000

Ответы (1 шт):

Автор решения: CrazyElf

Да вроде ничего сложного. Буквально всё делается:

df = df.merge(df.groupby('partnumber').median().reset_index(), on='partnumber', suffixes=('','_'))
df = df.loc[df['price'] <= df['price_']].drop(columns='price_')
df

Вывод:

    partnumber  oem         price
1   8K0805594L  VAG         12400
2   8K0805594L  VAG         8000
5   5181109000  SsangYong   4000
6   5181109000  SsangYong   2000
→ Ссылка