代码之家  ›  专栏  ›  技术社区  ›  Vishnudev Krishnadas

从组中获取另一列最小值的列的值

  •  3
  • Vishnudev Krishnadas  · 技术社区  · 6 年前

    输入

    我有一个带有文本、字符长度和“x”值的输入数据框。

        x   text    len     flag
    0   1   hi      2       1
    1   1   hello   5       0
    2   1   how     3       1
    3   2   are     3       1
    4   2   you?    4       1
    5   2   kiddo   5       1
    

    我要按x分组,并获取最短字符长度的文本,其中标志为1。

    输出

        x   text    len     select
    0   1   hi      2       hi
    1   1   hello   5       nan
    2   1   how     3       nan
    3   2   are     3       are
    4   2   you?    4       nan
    5   2   kiddo   5       nan
    

    我尝试分组并获取最小值,但是如何获取存在最小值的文本?我不想用Apply。

    df[df.flag == 1].groupby('x')['len'].transform('min') 
    

    我会得到最小字符长度值,但不会得到最小字符长度的文本值。

    1 回复  |  直到 6 年前
        1
  •  2
  •   cs95 abhishek58g    6 年前

    你需要 groupby transform 具有 idxmin :

    # Handle the `flag` requirement.
    v = df.assign(len=df['len'].where(df.flag.astype(bool)))
    
    condition = v.groupby('x')['len'].transform('idxmin')
    df.loc[condition, 'select'] = df.loc[condition, 'text'].values
    
    df
       x   text  len  flag select
    0  1     hi    2     1     hi
    1  1  hello    5     0    NaN
    2  1    how    3     1    NaN
    3  2    are    3     1    are
    4  2   you?    4     1    NaN
    5  2  kiddo    5     1    NaN
    
    推荐文章