首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对数据进行双组处理

对数据进行双组处理
EN

Stack Overflow用户
提问于 2019-05-09 22:22:53
回答 1查看 82关注 0票数 2

Dataframe:

代码语言:javascript
复制
STUD_ID   CLASS   GRADE  CATEGORY
1         'Sci'    2    'Alpha'
2         'Sci'    7    undefined
3         'Sci'    9    'Alpha'
4         'Sci'    NaN  'Alpha'
5         'Sci'    9    'Alpha'
6         'math'   9    undefined
7         'eng'    8    'Gamma'
8         'eng'    5    'Gamma'
9         'eng'    3    undefined
10        'Art'    3    'Lambda'
11        'Art'    8    'Lambda'
12        'Art'    5    undefined
13        'Art'    1    undefined
14        'Art'    NaN  undefined

我期待着决定是否学生类别‘未定’实际上是另一个类别,是存在于该特定的班级。要知道这一点,它应该检查“未定义”类别学生的成绩是否介于该班其他类别的最小最高分之间。

例如,第2行中的学生有“未定义的类别”:该类别应该改为'Alpha‘,因为它的7年级介于'Alpha’min和最高年级(2和9)之间。‘'Alpha’是'Sci‘类的另一个类别。

例如,相反的情况,第9行的学生。它的类别不应该改为“Gamma”,因为它的3年级不属于“Gamma”的年级范围(5-8)。‘'Gamma’是'eng‘班的另一类。

例如,在第14行中,“未定义”不应更改,因为是不可比较的。

例如,第6行中的“”(未定义)不应更改,因为没有其他类别。

结果

代码语言:javascript
复制
STUD_ID   CLASS   GRADE  CATEGORY
1         'Sci'    2    'Alpha'
2         'Sci'    7    'Alpha' *
3         'Sci'    9    'Alpha'
4         'Sci'    NaN  'Alpha'
5         'Sci'    9    'Alpha'
6         'math'   9    undefined
7         'eng'    8    'Gamma'
8         'eng'    5    'Gamma'
9         'eng'    3    undefined
10        'Art'    3    'Lambda'
11        'Art'    8    'Lambda'
12        'Art'    5    'Lambda' *
13        'Art'    1    undefined
14        'Art'    NaN  undefined

对于第一个未定义的。在我访问“科学”组之后,我如何访问“Alpha”的等级组?

我知道这可以访问当前的类组。

代码语言:javascript
复制
df.loc[df['CATEGORY'] == 'undefined', 'CATEGORY'] = df.groupby('CLASS')...

如果像下面这样的东西可以同时访问类和类别(“未定义的”除外),那就太好了。

代码语言:javascript
复制
func = lambda series : ...get min and max of series...

df.loc[df['CATEGORY'] == 'undefined', 'CATEGORY'] = df.groupby('CLASS').groupby('CATEGORY').where('CATEGORY'!='undefined').transform(func)..

怎么做?创建助手步骤列的答案也会有效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-09 23:36:05

检查以下内容是否对您有效:

  1. 给出各组的等级边界。 min_grade = df.groupby('CLASS').GRADE.transform('min') max_grade = df.groupby('CLASS').GRADE.transform('max')
  2. 找到默认类别以替换“未定义”(如果限定的话)。下面的行检索同一组中的第一个元素,如果存在,该元素不是“未定义的”,否则是“未定义的”。 更新:以前的代码在Pandas-0.17.1/python-2.7.2上工作,但在Pandas上生成ValueError -0.24.1/Python-3.7.2。在Pandas上进行了以下测试-0.24.1: default_cat = df.groupby('CLASS').CATEGORY.transform( lambda :xx!= 'undefined‘..iat if xx!=’未定义‘..size>0否则’未定义‘) 另一种计算default_cat的方法: default_cat = df.assign( cat=df.CATEGORY.replace({‘未定义’:np.nan}) )\ .groupby('CLASS').cat.transform('first') \.fillna(‘未定义’)
  3. 获得新的类别: df‘’new_cat‘= df.CATEGORY.mask( df.CATEGORY.eq(未定义的)& df.GRADE.gt(min_grade)和df.GRADE.lt(max_grade) ),( default_cat )打印(Df)# STUD_ID类等级类别new_cat #0 1 Sci 2 Alpha #1 2 Sci 7未定义Alpha #2阿尔法#3 4 NaN Alpha #4 5 Sci 9 Alpha #5 6数学9未定义未定义#6 7 eng 8 Gamma #7 8 Gamma #8 Gamma #8 9 eng 3未定义#9 10艺术3 Lambda Lambda #10 #11艺术8 Lambda # 11艺术5未定义的Lambda #12 13艺术1未定义的13 14艺术NaN未定义的艺术
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56068339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档