如何为Pandas DataFrame分组生成Quantity列的最大值填充列
为Pandas分组添加组内最大计数列
我有一个包含5列的Pandas DataFrame,其中第3、4列为坐标值,这些坐标常出现重复。我已经通过以下代码按abbreviation、X、Y分组,用cumcount生成了从0开始计数的Quantity列:
df['Quantity'] = df.groupby(['abbreviation', 'X', 'Y']).cumcount()
生成的DataFrame如下:
name abbreviation X Y Quantity 0 A-x A 15.6 19.4 0 1 A-y2 A 15.6 19.4 1 2 B-a B 15.0 25.0 0 3 B-d B 15.0 25.0 1 4 C-x1 C 15.0 10.0 0 5 C-c4 C 15.0 10.0 1 6 C-5 C 15.0 10.0 2 7 E-v E 83.4 16.5 0 8 E-2 E 83.4 16.5 1 9 E-v2 E 83.4 16.5 2 10 E-1 E 83.4 16.5 3 11 F-ab F 19.1 98.4 0 12 F-nb F 19.1 98.4 1 13 G-ku G 78.0 17.0 0
现在需要新增Max Quantity列,该列要填充对应分组内Quantity列的最大值,也就是每个分组内的所有行都显示该组的最大Quantity值,期望的最终DataFrame如下:
name abbreviation X Y Quantity Max Quantity 0 A-x A 15.6 19.4 0 1 1 A-y2 A 15.6 19.4 1 1 2 B-a B 15.0 25.0 0 1 3 B-d B 15.0 25.0 1 1 4 C-x1 C 15.0 10.0 0 2 5 C-c4 C 15.0 10.0 1 2 6 C-5 C 15.0 10.0 2 2 7 E-v E 83.4 16.5 0 3 8 E-2 E 83.4 16.5 1 3 9 E-v2 E 83.4 16.5 2 3 10 E-1 E 83.4 16.5 3 3 11 F-ab F 19.1 98.4 0 1 12 F-nb F 19.1 98.4 1 1 13 G-ku G 78.0 17.0 0 0
解决方案
使用Pandas的groupby.transform方法,对每个分组的Quantity列取最大值,将结果映射回原DataFrame的每一行:
df['Max Quantity'] = df.groupby(['abbreviation', 'X', 'Y'])['Quantity'].transform('max')
transform方法会自动将分组计算的最大值广播到该组的所有行,完美实现需求中的效果。
内容的提问来源于stack exchange,提问作者maxwell_742
相关产品推荐
相关产品推荐

