选项1 使用
transform
In [13]: dfc = df.groupby('y')['c']In [14]: df.assign(min=dfc.transform(min), max=dfc.transform(max))Out[14]: c y max min0 9 0 9 81 8 0 9 82 3 1 3 33 6 2 6 64 1 3 5 15 2 3 5 16 5 3 5 17 4 4 7 08 0 4 7 09 7 4 7 0要么
In [15]: df['min' ] = dfc.transform('min')In [16]: df['max' ] = dfc.transform('max')选项2 使用join和agg
In [30]: df.join(df.groupby('y')['c'].agg(['min', 'max']), on='y')Out[30]: c y min max0 9 0 8 91 8 0 8 92 3 1 3 33 6 2 6 64 1 3 1 55 2 3 1 56 5 3 1 57 4 4 0 78 0 4 0 79 7 4 0 7选项3 使用合并和汇总
In [28]: df.merge(df.groupby('y')['c'].agg(['min', 'max']), right_index=True, left_on='y')Out[28]: c y min max0 9 0 8 91 8 0 8 92 3 1 3 33 6 2 6 64 1 3 1 55 2 3 1 56 5 3 1 57 4 4 0 78 0 4 0 79 7 4 0 7


