是否有一种更有效的方法可以在分组后执行以下操作?
对于每一个
group
,我想得到最大值
value
为此
time
等于3
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)
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()