输入:
我有一个包含文本、字符长度以及值“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')
这将获得最小字符长度值,但不是字符长度最小的实际“文本”值。
最佳答案
你需要 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
关于python - 从组中获取另一列最小的列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53800683/