首页 > 解决方案 > pandas group by 并根据 group by 结果创建一个新列

问题描述

我有一个 DataFrame,我需要对其进行分组并根据结果分组添加一列。

我可以进行 groupby,但我需要一个名为“CLASS”的新列,如果 groupby“FIRST”列的结果为“3”,则意味着它应该通过,否则失败。

附上图片更清楚。

df = pd.DataFrame({'Name': {0: 'Ram',
  1: 'Ram',
  2: 'Ram',
  3: 'Vignesh',
  4: 'Vignesh',
  5: 'Vignesh',
  6: 'Paul',
  7: 'Paul',
  8: 'Paul',
  9: 'Stephen',
  10: 'Stephen',
  11: 'Stephen',
  12: 'Jones',
  13: 'Jones',
  14: 'Jones'},
 'Section': {0: 'A',
  1: 'A',
  2: 'A',
  3: 'B',
  4: 'B',
  5: 'B',
  6: 'C',
  7: 'C',
  8: 'C',
  9: 'D',
  10: 'D',
  11: 'D',
  12: 'E',
  13: 'E',
  14: 'E'},
 'School': {0: 'Don Bosco',
  1: 'Don Bosco',
  2: 'Don Bosco',
  3: 'Don Bosco',
  4: 'Don Bosco',
  5: 'Don Bosco',
  6: 'Don Bosco',
  7: 'Don Bosco',
  8: 'Don Bosco',
  9: 'Don Bosco',
  10: 'Don Bosco',
  11: 'Don Bosco',
  12: 'Don Bosco',
  13: 'Don Bosco',
  14: 'Don Bosco'},
 'Rank': {0: 'First',
  1: 'Second',
  2: 'First',
  3: 'Second',
  4: 'Second',
  5: 'First',
  6: 'First',
  7: 'First',
  8: 'First',
  9: 'Second',
  10: 'Second',
  11: 'Second',
  12: 'First',
  13: 'First',
  14: 'First'}})
newdf = df.groupby(['Name', 'Section','School','Rank']).size().unstack(fill_value=0)

实际数据框

在此处输入图像描述

实际输出:我尝试过的。

在此处输入图像描述

基于上述条件的类列的预期输出。

预期产出

标签: pythonpandas

解决方案


您可以使用numpy.where

import numpy as np

newdf['Class'] = np.where(newdf.First.eq(3), 'PASS', 'FAIL')

推荐阅读