在python中如何实现满足条件的列,他们两行相除

img


如图所示,SID是唯一的。我想知道CODE这一列(例如:210111,311018)。他们两个确定的行的money相除的结果。若某个SID中没有210111。但有311018。也把这个结果输出来。同时输出这两列。

打个比方,一个班有很多学生(每个学生都学了很多门课),现在我想知道每个学生(语文/数学)的值。同时,若学生没有语文成绩。也把这个学生的数学成绩输出来。

可用遍历方法去解,参考例子:

import pandas as pd
df=pd.DataFrame({'students':[1,2,3,4,5,6],'subjects':[['chinese','math','physics'],['PE','chinese','chemistry'],['math','french'],['chinese','math'],['computer','finance'],['math']],'score':[[86,78,66],[74,58,87],[85,69],[79,63],[56,58],[81]]})
res=[]
for i in range(len(df)):
    if 'math' in df['subjects'][i] and 'chinese' in df['subjects'][i]:
        res.append(df['score'][i][df['subjects'][i].index('chinese')] /
                   df['score'][i][df['subjects'][i].index('math')])
    elif 'math' in df['subjects'][i] and 'chinese'  not in df['subjects'][i]:
        res.append(df['score'][i][df['subjects'][i].index('math')])
    else:
        res.append(None)
print(res)


运行结果:

[1.1025641025641026, None, 85, 1.253968253968254, None, 81]