修改@2018-09-01:
import pandas as pd
import numpy as np
def readexcel(fn):
return pd.read_excel(fn, index_col=0)
def ranking(df):
df['总分'] = df.sum(axis=1)
df['名次'] = df['总分'].rank(ascending = False)
return df
f_s1, f_s2 = "s1.xlsx", "s2.xlsx"
s1, s2 = readexcel(f_s1), readexcel(f_s2)
s1, s2 = ranking(s1), ranking(s2)
s2['进步'] = s2['名次'] - s1['名次']
s2['分数'] =(s2['名次'] - s1['名次'])/2
s3 = s2[['进步','分数']].copy()
s3['进步'] = np.where(s3['进步']<0,-5,s3['分数'])
s3.to_excel("s3.xlsx")
修改的原因是讲《Python for Data Analysis》这本书时意识到新增加一列可以直接用df['']这样的方式来进行,不一定要用assign。之前"总分"和”进步",”名次"用英文也是因为当时不得不使用assign的原因。
修改后的代码测试通过可以使用。
————————————
最近正在学习python Pandas这个库,于是发现如果使用pandas来处理你的问题的话可能会比较容易一些。
下面的代码里面,f_s1和f_s2分别是你的以前的分数和现在的分数。里面的文件结构就是姓名,各科成绩,注意,没有名次,名次是用程序计算出来然后排名的。
import pandas as pd
import numpy as np
def readexcel(fn):
return pd.read_excel(fn, index_col=0)
def ranking(df):
df = df.assign(Zongfen = df.sum(axis=1))
df['名次'] = df['Zongfen'].rank(ascending = False)
return df
f_s1, f_s2 = "s1.xlsx", "s2.xlsx"
s1, s2 = readexcel(f_s1), readexcel(f_s2)
s1, s2 = ranking(s1), ranking(s2)
s2 = s2.assign(Jinbu = (s2['名次'] - s1['名次']))
s2 = s2.assign(Fenshu = (s2['名次'] - s1['名次'])/2)
s3 = s2[['Jinbu','Fenshu']].copy()
s3['Jinbu'] = np.where(s3['Jinbu']<0,-5,s3['Jinbu'])
s3.to_excel("s3.xlsx")
最后保存到s3.xlsx文件里面去。
s1: />
s2: />
s3: />