如何在Pandas中实现分组提取下一行成绩的条件逻辑?
Pandas实现按学生分组生成下一次测试成绩列
原始数据
| Student | Test | Grade |
|---|---|---|
| Jimmy | 1 | 100 |
| Jimmy | 2 | 83 |
| Jimmy | 3 | 85 |
| Drew | 1 | 93 |
| Drew | 2 | 95 |
| Drew | 3 | 100 |
| Smith | 1 | 89 |
| Smith | 2 | 86 |
| Smith | 3 | 89 |
| Billy | 1 | 97 |
| Billy | 2 | 80 |
| Billy | 3 | 78 |
需求说明
按学生姓名分组,新增Nexscore列存储同组下一次测试的成绩;每组最后一次测试的Nexscore设为NaN。处理后Jimmy的示例如下:
| Student | Test | Grade | Nexscore |
|---|---|---|---|
| Jimmy | 1 | 100 | 83 |
| Jimmy | 2 | 83 | 85 |
| Jimmy | 3 | 85 | NaN |
实现方法
直接使用Pandas的groupby结合shift方法即可完成,核心逻辑是对每组的Grade列向上偏移一位:
import pandas as pd # 构造或加载数据(这里以构造示例数据为例) data = { 'Student': ['Jimmy', 'Jimmy', 'Jimmy', 'Drew', 'Drew', 'Drew', 'Smith', 'Smith', 'Smith', 'Billy', 'Billy', 'Billy'], 'Test': [1,2,3,1,2,3,1,2,3,1,2,3], 'Grade': [100,83,85,93,95,100,89,86,89,97,80,78] } df = pd.DataFrame(data) # 生成Nexscore列:按学生分组后,将Grade列向上偏移一位 df['Nexscore'] = df.groupby('Student')['Grade'].shift(-1)
逻辑解释
groupby('Student'):将数据按学生姓名分组,确保仅在同一学生的测试记录内处理。shift(-1):对每组的Grade列执行向上偏移操作,当前行的Nexscore自动取同组下一行的Grade值;每组最后一行没有后续数据,会自动填充为NaN,完全符合需求。
内容的提问来源于stack exchange,提问作者Coding Student
相关产品推荐
相关产品推荐

