数据框:
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
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列 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
Run Code Online (Sandbox Code Playgroud)
我试过使用 groupby + 变换,但我不知道如何只广播 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |