數(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ì)算平均分,合成到表上去