Есть ли более эффективный способ сделать что-то вроде следующего после группировки по?
Для каждого group
я бы хотел получить максимум value
, для которого time
равно <=3 </p>
import numpy as np
import pandas as pd
d = dict(group=[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3], times=[0,1,2,3,4]*3, values=np.random.rand(15))
df = pd.DataFrame.from_dict(d)
# e.g.:
group times values
0 1 0 0.277623
1 1 1 0.227311
2 1 2 0.798941
3 1 3 0.861006
4 1 4 0.486385
5 2 0 0.543527
6 2 1 0.347159
7 2 2 0.138165
8 2 3 0.152132
9 2 4 0.402830
10 3 0 0.688038
11 3 1 0.450904
12 3 2 0.351267
13 3 3 0.195594
14 3 4 0.834823
Кажется, что работает следующее, но немного медленное и не очень краткое:
for label, group in df.groupby(['group']):
rows = group.index
df.loc[rows,'new_value'] = group.loc[group.time <= 3, 'values'].max()