Отфильтровать таблицу
Как отфильтровать таблицу так, чтобы остались только по 3 дата с одинаковым значением, при этом важно, чтобы они были state=person и максимальное значение price или если нет ни одного person, то просто ориентироваться по максимальному price.
import pandas as pd
import xlrd
file = 'file.xlsx'
xl = pd.ExcelFile(file)
df1 = xl.parse('Лист1')
print(df1)
Входные данные:
name price state data
0 John 5678 robot 1
1 John 234 person 1
2 John 453 robot 2
3 John 789 robot 1
4 John 3213 person 2
5 John 848 person 1
6 John 993 robot 2
7 John 89 person 2
8 John 321 robot 1
На выходе ожидаю:
name price state data
5 John 848 person 1
1 John 234 person 1
0 John 5678 robot 1
4 John 3213 person 2
7 John 89 person 2
6 John 993 robot 2
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
я бы делал это так:
res = (df
.assign(x=np.where(df["state"].eq("person"), 1, 0))
.groupby(["name", "data"])
.apply(lambda x: x.nlargest(3, ["x", "price"]))
.reset_index(level=[0,1], drop=True)
.sort_values(["name","data","x","price"], ascending=[1,1,0,0])
.drop(columns="x"))
результат:
In [56]: res
Out[56]:
name price state data
5 John 848 person 1
1 John 234 person 1
0 John 5678 robot 1
4 John 3213 person 2
7 John 89 person 2
6 John 993 robot 2