python pandas找排名及iloc/locの用法
import pandas as pd
import numpy as np
chengji=[[100,95,100,99],[90,98,99,100],[88,95,98,88],[99,98,97,88],[96.5,90,96,85],[94,94,93,91],[92, 99, 92, 87], [85, 88, 85, 90], [90, 92, 99, 88], [90, 88, 89, 81], [85, 89, 89, 82], [95, 87, 86, 88], [90, 97, 97, 98], [80, 92, 89, 98], [80, 98, 85, 81], [98, 88, 95, 92]]
data=pd.DataFrame(chengji,columns=['语文','类别','数学','政治'])
data['合计']=data.apply(lambda x: x.sum(),axis=1) #按列相加各行数
data.sort_values(by=['合计','语文'] , ascending=[False,False],inplace=True) #按多列值排序,ascending=False降序
#data.sort_values(by='语文',axis=1,ascending=True, inplace=True, na_position='last')
#重建索引会把原索引值变成object
data['排名']=data['合计'].rank(ascending=0,method='min')
#print (data)
data['姓名']='姓名'+data['排名'].astype(str)
data.sort_values(by=['数学','语文'], ascending=[False,False],inplace=True)
print ('按数学语文排',data)
data['数学排名']=data['数学'].rank(ascending=0,method='min')
print('总排名前三后三',data[data['排名']>=len(data)-3].iloc[-3:])
print(data.sort_values(by='排名', ascending=True,inplace=False).iloc[0:3])
print(data.sort_values(by='排名', ascending=False,inplace=False).iloc[0:3])
print("数学排名前三后三")
namelists=data.sort_values(by='数学排名', ascending=True,inplace=False).iloc[0:3][['数学','姓名','数学排名']].values.tolist()
print(namelists,type(namelists))
print(data.sort_values(by='数学排名', ascending=False,inplace=False).iloc[0:3][['数学','姓名','数学排名']])
chengji=[[100,95,100,99],[90,98,99,100],[88,95,98,88],[99,98,97,88],[96.5,90,96,85],[94,94,93,91],[92, 99, 92, 87], [85, 88, 85, 90], [90, 92, 99, 88], [90, 88, 89, 81], [85, 89, 89, 82], [95, 87, 86, 88], [90, 97, 97, 98], [80, 92, 89, 98], [80, 98, 85, 81], [98, 88, 95, 92]]
data=pd.DataFrame(chengji,columns=['语文','类别','数学','政治'])
data1=data.iloc[0:3] #前闭后开 frame.iloc[[0,3],[0,3]] 单行列时,双闭
print('iloc',data1)
data2=data.loc[0:5] #.loc先行后列,中间用逗号(,)分割可以写成'frame.loc['a':'b',:]'frame.loc[['a','d'],['A','D']]双闭区间
print('loc',data2)
对于排前三后三的来说,用iloc来切片更直接,只取得三名,
在iloc和loc比较时,iloc[0:3] #前闭后开 loc[0:5]是双闭的