python pandas找排名及iloc/locの用法

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]是双闭的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值