佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > pandas 實(shí)現(xiàn)分組后取第N行

pandas 實(shí)現(xiàn)分組后取第N行

熱門標(biāo)簽:電話運(yùn)營(yíng)中心 語(yǔ)音系統(tǒng) 硅谷的囚徒呼叫中心 呼叫中心市場(chǎng)需求 客戶服務(wù) 企業(yè)做大做強(qiáng) Win7旗艦版 百度AI接口

目的:

把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ò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Pandas中DataFrame的分組/分割/合并的實(shí)現(xiàn)
  • pandas分組排序 如何獲取第二大的數(shù)據(jù)
  • pandas group分組與agg聚合的實(shí)例
  • pandas groupby分組對(duì)象的組內(nèi)排序解決方案
  • pandas組內(nèi)排序,并在每個(gè)分組內(nèi)按序打上序號(hào)的操作
  • pandas 實(shí)現(xiàn)某一列分組,其他列合并成list

標(biāo)簽:崇左 濟(jì)南 長(zhǎng)沙 海南 安康 山西 喀什 山西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pandas 實(shí)現(xiàn)分組后取第N行》,本文關(guān)鍵詞  ;如發(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)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    惠安县| 大悟县| 莒南县| 通海县| 平阳县| 克东县| 酉阳| 延川县| 景宁| 祁阳县| 长治县| 施秉县| 永寿县| 涟源市| 灌云县| 辽阳县| 奉新县| 昭苏县| 临汾市| 涡阳县| 绍兴市| 海安县| 中西区| 吴川市| 汝南县| 百色市| 宿松县| 凌源市| 长治市| 甘洛县| 东安县| 平遥县| 拉孜县| 呼玛县| 五华县| 江华| 仙居县| 韶关市| 垫江县| 宁国市| 岑溪市|