仅在包含熊猫的组的最后一行中添加组的最小值

时间:2018-09-09 21:53:46

标签: python pandas dataframe pandas-groupby

我正在尝试计算属于某个第一列值的第二列的最小值。 所以我的数据框如下:

name        CEMS    star
ACC         CEMS-1  3
ACC         CEMS-2  4
ACC         CEMS-3  5
ACC         CEMS-4  5
ARTi        CEMS-1  4
ARTi        CEMS-2  5
ARTi        CEMS-3  4
ARTi        CEMS-4  5

现在我想从CEMS的不同值中在单独的列中为每个名称找到一个最小星值

我希望我的数据框看起来像这样:

Name            CEMS    star  min
ACC         CEMS-1        3    
ACC         CEMS-2        4     
ACC         CEMS-3        5     
ACC         CEMS-4        5     3
ARTi        CEMS-1        4     
ARTi        CEMS-2        5     
ARTi        CEMS-3        4     
ARTi        CEMS-4        5     4

有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

transform是不够的。您将需要屏蔽除最后一个索引以外的所有内容。您可以执行索引对齐分配。

g = df.groupby('name')['star']
df['minstar'] = pd.Series(g.min(), index=g.apply(pd.Series.last_valid_index))

df.fillna('')

   name    CEMS  star minstar
0   ACC  CEMS-1     3        
1   ACC  CEMS-2     4        
2   ACC  CEMS-3     5        
3   ACC  CEMS-4     5       3
4  ARTi  CEMS-1     4        
5  ARTi  CEMS-2     5        
6  ARTi  CEMS-3     4        
7  ARTi  CEMS-4     5       4

答案 1 :(得分:0)

您可以将GroupBytransformmin一起使用。如果您的数据框也按name排序,则可以将drop_duplicates用于所需的输出。

df['star_min'] = df.groupby('name')['star'].transform('min')\
                   .drop_duplicates(keep='last')

print(df)

   name    CEMS  star  star_min
0   ACC  CEMS-1     3       NaN
1   ACC  CEMS-2     4       NaN
2   ACC  CEMS-3     5       NaN
3   ACC  CEMS-4     5       3.0
4  ARTi  CEMS-1     4       NaN
5  ARTi  CEMS-2     5       NaN
6  ARTi  CEMS-3     4       NaN
7  ARTi  CEMS-4     5       4.0

答案 2 :(得分:0)

仅更改最后一个值,如预期输出一样

ind = df.groupby('name', as_index=False).apply(lambda s: s.index[-1])
df.loc[ind, 'min'] = df.groupby('name').star.min().values

    name    CEMS    star    min
0   ACC     CEMS-1  3       NaN
1   ACC     CEMS-2  4       NaN
2   ACC     CEMS-3  5       NaN
3   ACC     CEMS-4  5       3.0
4   ARTi    CEMS-1  4       NaN
5   ARTi    CEMS-2  5       NaN
6   ARTi    CEMS-3  4       NaN
7   ARTi    CEMS-4  5       4.0