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

标签 python pandas pandas-groupby

输入:

我有一个包含文本、字符长度以及值“x”和“flag”的输入数据框:

    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' 进行分组并获得 'flag' 为 1 的最小字符长度的 'text'。

输出:

    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

我尝试使用 groupby() 并获取最小值,但如何获取存在最小值的文本?我不想使用申请。

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

这将获得最小字符长度值,但不是字符长度最小的实际“文本”值。

最佳答案

你需要 groupbytransformidxmin:

# 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

关于python - 从组中获取另一列最小的列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53800683/

相关文章:

python - DataFrame Python 中的数学求值字符串

python - Pandas:将数据帧转换为相邻行的数据帧列表

python - 如何在考虑带连字符的单词的同时在 Python 中拆分单词?

javascript - 动态语言文档

python - 使用 Lambda 将 Pandas 时间转换为小时

python - 使用 OR 根据两列过滤数据框

python - Pandas : Problem with aggregation by periods of two months

python - Pandas:如何按 groupby 值求和

python - 如何使用python将阿拉伯字符映射到英文字符串

python - 谷歌应用引擎 : traffic monitoring