基于ID和Rank分组计算Grade列均值(忽略0与NA无效值)
解决方案
嘿,这个需求很常见,咱们用Pandas就能轻松搞定!核心思路就是先过滤掉无效的0值和NA值,再按ID和Rank分组计算Grade的均值。下面是具体步骤和代码:
步骤1:过滤无效数据
首先,我们需要把Grade列里的0值和缺失值(NA)都排除掉,避免它们干扰均值计算。这里有两种常用写法:
方法一:布尔索引
import pandas as pd # 假设你的DataFrame名为df filtered_data = df[(df['Grade'] != 0) & (~df['Grade'].isna())]
方法二:更简洁的query写法
如果喜欢代码更紧凑,query方法会更顺手:
filtered_data = df.query("Grade != 0 and Grade.notna()")
步骤2:分组计算均值
过滤完数据后,就可以按ID和Rank组合分组,对Grade列求均值了。最后用reset_index()把分组索引转成普通列,方便查看和后续处理:
# 分组计算均值 result = filtered_data.groupby(['ID', 'Rank'])['Grade'].mean().reset_index() # 打印结果 print(result)
举个实际例子,假设你的原始数据是这样的:
| ID | Rank | Grade |
|---|---|---|
| 123 | E1 | 85 |
| 123 | E1 | 90 |
| 123 | E1 | 0 |
| 123 | E2 | 78 |
| 123 | E2 | NaN |
| 456 | E1 | 92 |
运行代码后,得到的结果会是:
| ID | Rank | Grade |
|---|---|---|
| 123 | E1 | 87.5 |
| 123 | E2 | 78.0 |
| 456 | E1 | 92.0 |
完美避开了0和NA值,精准计算了每个ID+Rank组合下的Grade均值!
内容的提问来源于stack exchange,提问作者ckdf14
相关产品推荐
相关产品推荐

