gpt4 book ai didi

python - 按条件将值广播到数据帧组

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:04 25 4
gpt4 key购买 nike

数据框:

STUD_ID   CLASS   GRADE  CATEGORY 
1 'Sci' max 'Alpha'
2 'Sci' 7 'Omega'
3 'Sci' 9 'Alpha'
4 'Sci' 3 'Alpha'
5 'Sci' 9 'Alpha'
7 'eng' max 'Gamma'
8 'eng' 5 'Gamma'
9 'eng' 3 'Epsilon'
10 'Art' 3 'Lambda'
11 'Art' 8 'Lambda'
12 'Art' max undefined
13 'Art' 1 undefined
14 'Art' 5 undefined

我想创建一个新列 CATEGORY_1,将 CATEGORY 值(其中 GRADE 为最大值)广播到它们各自的 CLASS 组。请参阅下面的结果 df。

STUD_ID   CLASS   GRADE  CATEGORY CATEGORY_1
1 'Sci' max 'Alpha' . 'Alpha'
2 'Sci' 7 'Omega' . 'Alpha'
3 'Sci' 9 'Alpha' . 'Alpha'
4 'Sci' 3 'Alpha' . 'Alpha'
5 'Sci' 9 'Alpha' . 'Alpha'
7 'eng' max 'Gamma' . 'Gamma'
8 'eng' 5 'Gamma' . 'Gamma'
9 'eng' 3 'Epsilon' 'Gamma'
10 'Art' 3 'Lambda' . undefined
11 'Art' 8 'Lambda' . undefined
12 'Art' max undefined . undefined
13 'Art' 1 undefined . undefined
14 'Art' 5 undefined . undefined

我试过使用 groupby + transform,但我不知道如何只广播 GRADE 最大的 CATEGORY 值。

最佳答案

因为你提到了groupby + transform:

这很困难,因为您的转换取决于多个列。这需要您的转换函数接受系列和整个 DataFrame,然后您可以将其子集化到组内(基于系列索引)。你应该有一个唯一的索引才能正常工作。

def get_max_cat(grade, df):
s = grade=='max'
return df.loc[s[s].index, 'CATEGORY'].item() # Assumes always one max

df['Category_1'] = df.groupby('CLASS').GRADE.transform(get_max_cat, df=df)

关于python - 按条件将值广播到数据帧组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com