>我有一个数据框如下:
df = pd.DataFrame({'unique_id':['x','x' , 'y', 'y'], 'chk':[5, 6, -4, -5], 'score':[5.52363, 6.73939, 7.53637, 3.08375]})
我想按'unique_id'
列分组并在'score'
列中查找最大值,并将最大值设置为 1,将其他设置为 0。
我试过df['result'] = df.groupby('unique_id').apply(lambda x: [x.score.idxmax()])
但它给了我空值。我的预期输出是
unique_ID chk score result
x 5 5.52363 0
x 6 6.73939 1
y -4 7.53637 1
y -5 3.08375 0
将GroupBy.transform
与Series.eq
一起使用以检查值是否为最大值,并Series.astype
得到 0 或 1
df['result'] = df['score'].eq(df.groupby('unique_id')
.score
.transform('max')).astype(int)
print(df)
unique_id chk score result
0 x 5 5.52363 0
1 x 6 6.73939 1
2 y -4 7.53637 1
3 y -5 3.08375 0