pandas組內(nèi)排序,并在每個(gè)分組內(nèi)按序打上序號(hào)
pandas dataframe 對(duì)dep_id組內(nèi)的salary排序。希望給下面原本只有前三列的dataframe,添加上第四列。
等價(jià)于sql里的排序函數(shù) row_number() over() 功能
假設(shè)我已經(jīng)建好了僅有前三列的dataframe,數(shù)據(jù)集命名為 MyData,
MyData['sort_id'] = MyData['salary'].groupby(MyData['dep_id']).rank()
結(jié)果如下:
補(bǔ)充:Pandas.DataFrame實(shí)現(xiàn)分組、排序并且為分組插入排名
import pandas as pd data_dict = {"name": ["Rose", "Jack", "Tom", "Kyle", "Jery", "Adam", "Bill", "David", "Denny", "Evan"], "class": [1, 2, 3, 1, 2, 3, 1, 2, 3, 1], "score": [88, 92, 38, 98, 22, 65, 45, 53, 97, 100]} df = pd.DataFrame(data=data_dict) df
df = df.groupby('class', sort=False)\ .apply(lambda x:x.sort_values("score", ascending=False))\ .reset_index(drop=True) df
df["rank"] = None # 標(biāo)識(shí)班級(jí) flag = df.loc[0].values[1] rank = 0 for i in range(len(df)): temp = df.loc[i].values[1] if (temp == flag).all(): # 同一班級(jí) rank += 1 else: # 不同班級(jí),重新計(jì)算排名 flag = temp rank = 1 df.loc[i, "rank"] = rank df
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
標(biāo)簽:股票 隨州 錦州 西安 日照 白城 安慶 天水
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pandas組內(nèi)排序,并在每個(gè)分組內(nèi)按序打上序號(hào)的操作》,本文關(guān)鍵詞 pandas,組內(nèi),排序,并在,每個(gè),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。