使用pandas查找分组行的最小值

问题描述

要获得每个组使用的A列的最小值 transform

df.groupby('group_id')['A'].transform('min')

解决方法

这可能是一个琐碎的问题,但我仍在尝试找出pandas / numpy。

因此,假设我有一个具有以下结构的表:

group_id | col1 | col2 | col3 |  "A"   |  "B"
   x     |   1  |   2  |  3   |  NaN   |   1
   x     |   3  |   2  |  3   |   1    |   1 
   x     |   4  |   2  |  3   |   2    |   1
   y     |   1  |   2  |  3   |  NaN   |   3 
   y     |   3  |   2  |  3   |   3    |   3 
   z     |   3  |   2  |  3   |   10   |   2
   z     |   2  |   2  |  3   |   6    |   2
   z     |   4  |   2  |  3   |   4    |   2
   z     |   4  |   2  |  3   |   2    |   2

请注意,有一个group_id将每行中的元素分组。因此,一开始,我具有group_id和col1-col3列的值。

然后,对于每一行,如果col1,col2或col3的值= 1,则“ A”为NaN,否则该值基于公式(与此处无关,因此我在其中放置了一些数字)。

那,我知道如何使用:

df["A"] = np.where(((df['col1'] == 1)|(df['col2']== 1) | (df['col3']) == 1))),NaN,value)

但是对于列“ B”,我需要使用特定组中列A的最小值填充它。

因此,例如,对于具有组X的所有行,“ B”等于“ 1”,因为对于所有“ x”组行的A列中的最小值等于1。

同样,对于“ y”组中的行,最小值为3,对于“ z”组中的最小值为2。我如何使用熊猫来做到这一点?这让我更加困惑,因为特定组的行数可能会有所不同。

如果它们都是相同的大小,我只能说用预设范围内的最小值填充它。

我希望这是有道理的; 请让我知道我是否应该提供更清晰的示例或澄清任何内容!