Я хочу взять n
наибольшие значения DataFrame для каждого Date
, но я хочу, чтобы n
варьировалось по дате. Так, например, этот limits
DataFrame указывает количество значений, которые я хочу для каждой даты:
np.random.seed(456)
limits = pd.DataFrame(np.random.randint(2,5,5), pd.date_range('2020-01-01','2020-01-05').tolist(), columns=['limit'])
limit
2020-01-01 4
2020-01-02 2
2020-01-03 4
2020-01-04 2
2020-01-05 3
А вот пример DataFrame, к которому я хочу применить те:
j = [(a, b) for a in ['A','B','C','D','E'] for b in pd.date_range('2020-01-01','2020-01-05').tolist()]
i = pd.MultiIndex.from_tuples(j, names=['Name','Date'])
df = pd.DataFrame(np.random.randn(25), i, columns=['Vals'])
Vals
Name Date
A 2020-01-01 -1.240210
2020-01-02 -0.954311
2020-01-03 -0.468707
2020-01-04 -0.861229
2020-01-05 0.138360
B 2020-01-01 -0.164922
2020-01-02 -0.257626
2020-01-03 -1.200235
...
С постоянной ссылкой n = 2
я могу получить 2 самых больших значения, используя:
df.groupby(['Date']).apply(lambda x: (x.sort_values('Vals').head(2))).reset_index(level=0, drop=True)
Vals
Name Date
A 2020-01-01 -1.240210
E 2020-01-01 -1.095603
D 2020-01-02 -1.298098
A 2020-01-02 -0.954311
...
Но как мне получить число строк, указанное limits
на каждую дату?