pandas數(shù)據(jù)行列轉(zhuǎn)換

數(shù)據(jù)分析清洗數(shù)據(jù)的過程中,會(huì)用到數(shù)據(jù)的行列轉(zhuǎn)換,求平均值等,我們得到的數(shù)據(jù)是原始數(shù)據(jù),有些數(shù)據(jù)是個(gè)體的多和元素散亂的表格,需要整理,例如下面兩個(gè)人的各個(gè)科目的成績(jī)


這個(gè)原始表記錄每個(gè)同學(xué)的科目成績(jī),但不是我們想要的明晰的表:按人分組統(tǒng)計(jì)各個(gè)科目的成績(jī)和平均成績(jī),那怎么做呢,今天就學(xué)習(xí)這個(gè)行列轉(zhuǎn)換的方法:

首先我們要對(duì)表進(jìn)行按照 名字 性別 科目 分下組,類似SQL里面的group by?

這里用到函數(shù)set_index() 這個(gè)函數(shù)很厲害的,實(shí)際上他進(jìn)行了分組和索引的工作,如下圖

按名字 性別 科目進(jìn)行的分組統(tǒng)計(jì),有點(diǎn)意思吧,繼續(xù)整理


分組統(tǒng)計(jì)后表看起來好多了 但是還不是太好,每個(gè)人都有相同的科目,要是把科目放到列上去就好看了

這就需要進(jìn)行行列轉(zhuǎn)換了,例如函數(shù)unstack() 講數(shù)據(jù)的行 旋轉(zhuǎn) 成列。

那么stack()函數(shù)就是把數(shù)據(jù)的 列 旋轉(zhuǎn)成行了 很聰明!


在這里補(bǔ)充下知識(shí)點(diǎn)關(guān)于stack() 和unstack()

pandas軸旋轉(zhuǎn)stack和unstack用法詳解

首先,要知道以下五點(diǎn):

1.stack:將數(shù)據(jù)的列“旋轉(zhuǎn)”為行

2.unstack:將數(shù)據(jù)的行“旋轉(zhuǎn)”為列

3.stack和unstack默認(rèn)操作為最內(nèi)層

4.stack和unstack默認(rèn)旋轉(zhuǎn)軸的級(jí)別將會(huì)成結(jié)果中的最低級(jí)別(最內(nèi)層)

5.stack和unstack為一組逆運(yùn)算操作

第一點(diǎn)和第二點(diǎn)以及第五點(diǎn)比較好懂,可能乍看第三點(diǎn)和第四點(diǎn)會(huì)不太理解,沒關(guān)系,看看具體下面的例子,你就懂了。




言歸正傳:

我們行轉(zhuǎn)列以后 發(fā)現(xiàn)沒有參加科目考試的同學(xué)成績(jī)是NaN ,不好看也不利于后面的計(jì)算,怎么辦?填充成0,有個(gè)函數(shù)fillna()


下面計(jì)算每個(gè)人的平均分:

mean()函數(shù) 求平均值,參數(shù)axis=1 是壓縮列 對(duì)行求平均值 axis=0 是壓縮行 對(duì)列求平均值

我們求每個(gè)人的平均值是需要axis=1 壓縮列 求行的平均值


這是每個(gè)人的平均分,你也可以試試axis=0 求列的平均值是什么:所有人每個(gè)科目的平均分

例如下面


好了每個(gè)人的平均分出來了 就加到表格后面成為一列吧



以上就是今天的學(xué)習(xí)思路:

先用set_index()重建索引 分組

再unstack()把行轉(zhuǎn)換成列

然后用mean()計(jì)算平均分,合成到表上去

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容