我有一个包含学生及其学校科目的数据框:
主题 | 马克 |
---|---|
海伦 | |
艺术 | 20 |
哲学 | 16.8 |
经济 | 12 |
科林 | |
数学 | 19.2 |
地理 | 17 |
历史 | 15 |
对于每个科目,都有不同的权重,权重因学期而异,并影响学生的总成绩:
主题 | 重量 |
---|---|
艺术 | 0.1 |
哲学 | 0.6 |
经济 | 0.2 |
数学 | 0.5 |
地理 | 0.01 |
哲学 | 0.5 |
历史 | 0.3 |
数学 | 0.6 |
我正在考虑实现某种带有连接方法的vlook up,但由于权重发生变化,我必须更新表格。 不过,我想在浏览权重表时将输出打印在文件中。在这种情况下,我知道我可以使用 for 循环,但这不是最优化的方法。
我可以在这种情况下使用任何类型的 lamda 吗? 此外,有什么方法可以识别每个学生的总变化何时并输出?我正在考虑从数据框中创建子组,然后检查累积和?
本质上,在迭代上面的权重表时,我希望我的输出是: 主题 = 分数 * 体重,但还要考虑和跟踪学生总数的变化,因此:
Art: 0.2
Philosophy: 10.08
Economics: 2.4
Helen: 12.68
Maths: 9.6
Geography: 0.17
Philosophy:8.4
Helen:11
History:4.5
Colin: 14.27
Maths:11.52
Colin:16.19
map
+mul
、isna
和 groupby.transform
: 的组合来计算预期输出
# build mapping series withou unique Subjects
s = weights.drop_duplicates('Subject').set_index('Subject')['Weight']
# compute the weighted Mark
df['Weighted_Mark'] = df['Mark'].mul(df['Subject'].map(s))
# identify Names
m = df['Mark'].isna()
# compute total
df.loc[m, 'Weighted_Mark'] = df.groupby(m.cumsum())['Weighted_Mark'].transform('sum')
输出:
Subject Mark Weighted_Mark
0 Helen NaN 14.48
1 Art 20.0 2.00
2 Philosophy 16.8 10.08
3 Economics 12.0 2.40
4 Colin NaN 14.27
5 Maths 19.2 9.60
6 Geography 17.0 0.17
7 History 15.0 4.50