python - 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)
实际数据框
实际输出:我尝试过的。
基于上述条件的类列的预期输出。
解决方案
您可以使用numpy.where
:
import numpy as np
newdf['Class'] = np.where(newdf.First.eq(3), 'PASS', 'FAIL')
推荐阅读
- unicode - 是否可以在没有预测文本的 Android 设备上安装和分发自定义 Keyman 键盘?
- javascript - 如何将 Express 错误转换为用户友好的消息?
- javascript - 另一个ajax函数成功后如何刷新另一个ajax函数
- javascript - 在日历外输入后使用来自 API 的数据更新完整的日历 Vue 事件
- javascript - 无法将我的节点应用程序部署到 Hostinger、centOS > CyberPanel 在 localhost:3030 工作正常时
- ios - Obj-c - 在 UITableView 中按字母顺序排列字典数组
- python - 合并熊猫数据框上的多列(不同列上的“Vlookup”)
- python - Django:TypeError:ModelBase 类型的对象不是 JSON 可序列化的
- javascript - 是否可以将段落中的值发送到服务器?
- c# - 模板化的 FrameworkElement 无法从后面的代码中修改