pandas 實(shí)現(xiàn)分組后取第N行
目的:
把question_id 對(duì)應(yīng)的user_answer轉(zhuǎn)成ABCD
solution
dfa=df.groupby('question_id').nth(0).reset_index() dfa['flag']='A' dfb=df.groupby('question_id').nth(1).reset_index() dfb['flag']='B' dfc=df.groupby('question_id').nth(2).reset_index() dfc['flag']='C' dfd=df.groupby('question_id').nth(3).reset_index() dfd['flag']='D' resdf=dfa.append([dfb,dfc,dfd]) resdf.sort_values(by='question_id')
result
:
focus
:
g.nth(0) #同 g.first() g.head(1) g.last() g.nth(2) g.nth(-1) g.nth(0,dropna='any') g.B.nth(0,dropna='all') g.groups g.get_group(134429) g.discribe() g.agg([np.mean,np.sum.np,std])
補(bǔ)充:pandas的分組取最大多行并求和函數(shù)nlargest()
在pandas庫(kù)里面,我們常常關(guān)心的是最大的前幾個(gè),比如銷售最好的幾個(gè)產(chǎn)品,幾個(gè)店,等。之前講到的head(), 能夠看到看到DF里面的前幾行,如果需要看到最大或者最小的幾行就需要先進(jìn)行排序。max()和min()可以看到最大或者最小值,但是只能看到一個(gè)值。
所以我們可以使用nlargest()函數(shù),nlargest()的優(yōu)點(diǎn)就是能一次看到最大的幾行,而且不需要排序。缺點(diǎn)就是只能看到最大的,看不到最小的。
我們來(lái)看看單價(jià)排在前十的數(shù)據(jù):
單價(jià)排在前十的數(shù)據(jù)
nlargest()的第一個(gè)參數(shù)就是截取的行數(shù)。第二個(gè)參數(shù)就是依據(jù)的列名。
這樣就可以篩選出單價(jià)最高的前十行,而且是按照單價(jià)從最高到最低進(jìn)行排列的,所以還是按照之前的索引。
還可以按照total_price來(lái)進(jìn)行排名:
按照total_price排名
nlargest還有一個(gè)參數(shù),keep='first'或者'last'。當(dāng)出現(xiàn)重復(fù)值的時(shí)候,keep='first',會(huì)選取在原始DataFrame里排在前面的,keep='last'則去排后面的。
由于nlagerst()不能去最小的多個(gè)值,如果我們一定要使用這個(gè)函數(shù)進(jìn)行選取也是可以的.
先設(shè)置一個(gè)輔助列:
先設(shè)置一個(gè)輔助列
然后在進(jìn)行選?。?/p>
以輔助列進(jìn)行選取
當(dāng)然了,也可以通過(guò)head()加上排序進(jìn)行選取的。
那以前這些操作都可以通過(guò)其它函數(shù)來(lái)進(jìn)行替代的話,nlargest()有什么必要介紹嗎?或者說(shuō)學(xué)不學(xué)這個(gè)函數(shù)有什么關(guān)系嗎?
這就是我們今天要重點(diǎn)介紹的,如果說(shuō)要選擇不同location_road下的前五名要怎么操作呢?
很多人可能第一反應(yīng)會(huì)想到先分組然后進(jìn)行max()操作,但是這樣的操作只能選擇最大的一列:
使用max()
但是使用max有一個(gè)問(wèn)題,就是選取的是每一列的最大值,而不是選取最大值的那一行,也就是說(shuō)只能在選取單列的最大值的時(shí)候才是準(zhǔn)確的。
這個(gè)時(shí)候我們就要想到apply和lambda的自定義函數(shù)了:
選取多個(gè)指標(biāo)的TOP(N)
這樣就選出了不同loaction_road的price排在前五的行了。
nlargest()函數(shù)在這種場(chǎng)景下使用是非常方便的,而且結(jié)果也已經(jīng)默認(rèn)排好順序了。
還有一些場(chǎng)景下需要計(jì)算分組的前幾名,然后在進(jìn)行求和的,這個(gè)我們也可以使用nlargest進(jìn)行操作:
分組之后進(jìn)行求和
使用這種方法會(huì)出現(xiàn)報(bào)錯(cuò)提示,這個(gè)因?yàn)樵诹泻退饕即嬖趌oaction_road,有重復(fù),系統(tǒng)有警告,在實(shí)際使用時(shí)可以先改列名再操作。我們也可以換一種方式直接按照索引進(jìn)行求和,這樣就沒(méi)有警告了:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Python pass語(yǔ)句作用和Python assert斷言函數(shù)的用法
這篇文章主要介紹了Python pass語(yǔ)句作用和Python assert斷言函數(shù)的用法,文章內(nèi)容介紹詳細(xì)具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助2022-03-03python對(duì)視頻畫(huà)框標(biāo)記后保存的方法
今天小編就為大家分享一篇python對(duì)視頻畫(huà)框標(biāo)記后保存的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python使用PythonMagick將jpg圖片轉(zhuǎn)換成ico圖片的方法
這篇文章主要介紹了python使用PythonMagick將jpg圖片轉(zhuǎn)換成ico圖片的方法,涉及PythonMagick模塊操作圖片的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03Python實(shí)現(xiàn)基于socket的udp傳輸與接收功能詳解
這篇文章主要介紹了Python實(shí)現(xiàn)基于socket的udp傳輸與接收功能,結(jié)合實(shí)例形式詳細(xì)分析了Python使用socket進(jìn)行udp文件傳輸與接收相關(guān)操作技巧及注意事項(xiàng),需要的朋友可以參考下2019-11-11使用python檢測(cè)網(wǎng)頁(yè)文本內(nèi)容屏幕上的坐標(biāo)
在 Web 開(kāi)發(fā)中,經(jīng)常需要對(duì)網(wǎng)頁(yè)上的文本內(nèi)容進(jìn)行處理和操作,有時(shí)候,我們可能需要知道某個(gè)特定文本在屏幕上的位置,以便進(jìn)行后續(xù)的操作,所以本文將介紹如何使用 Python 中的 Selenium 和 BeautifulSoup 庫(kù)來(lái)檢測(cè)網(wǎng)頁(yè)文本內(nèi)容在屏幕上的坐標(biāo),需要的朋友可以參考下2024-04-04PyTorch中torch.nn.Linear實(shí)例詳解
torch.nn是包含了構(gòu)筑神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)基本元素的包,在這個(gè)包中可以找到任意的神經(jīng)網(wǎng)絡(luò)層,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.nn.Linear的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06