Pandas 數(shù)據(jù)分析小技巧系列 第五集

三步加星標(biāo)
??你好,我是 zhenguo
今晚小技巧第五篇,做數(shù)據(jù)分析數(shù)據(jù)透視必不可少,數(shù)據(jù)透視讓我們更加了解數(shù)據(jù)的規(guī)律。
Pandas 與透視相關(guān)的方法有 3 個(gè),下面分別介紹使用它們的小技巧。?
16 melt透視數(shù)據(jù)小技巧
melt 方法固定某列為一個(gè)維度,組合其他列名為另一個(gè)維度,實(shí)現(xiàn)寬表融化為長(zhǎng)表:
???zip_code??factory??warehouse??retail
0?????12345??????100????????200???????1
1?????56789??????400????????300???????2
2????101112??????500????????400???????3
3????131415??????600????????500???????4
固定列zip_code,組合factory,warehouse,retail 三個(gè)列名為一個(gè)維度,按照這種方法湊齊兩個(gè)維度后,數(shù)據(jù)一定變長(zhǎng)。
pandas 的 melt 方法演示如下:
In?[49]:?df?=?df.melt(id_vars?=?"zip_code")?
若melt方法,參數(shù)value_vars不賦值,默認(rèn)剩余所有列都是value_vars,所以結(jié)果如下:
????zip_code???variable??value
0??????12345????factory????100
1??????56789????factory????400
2?????101112????factory????500
3?????131415????factory????600
4??????12345??warehouse????200
5??????56789??warehouse????300
6?????101112??warehouse????400
7?????131415??warehouse????500
8??????12345?????retail??????1
9??????56789?????retail??????2
10????101112?????retail??????3
11????131415?????retail??????4
若只想查看 factory 和 retail,則 value_vars 賦值為它們即可:
In?[62]:?df_melt2?=?df.melt(id_vars?=?"zip_code",value_vars=['factory','reta
????...:?il'])??
結(jié)果:
zip_code?variable??value
0?????12345??factory????100
1?????56789??factory????400
2????101112??factory????500
3????131415??factory????600
4?????12345???retail??????1
5?????56789???retail??????2
6????101112???retail??????3
7????131415???retail??????4
melt 透視數(shù)據(jù)后,因?yàn)榻M合多個(gè)列為1列,所以數(shù)據(jù)一定變長(zhǎng)。
17 pivot 透視小技巧
melt 是融化數(shù)據(jù),而 pivot 結(jié)冰數(shù)據(jù),它們是一對(duì)互逆操作。
這是上面 melt 后的數(shù)據(jù):
zip_code?variable??value
0?????12345??factory????100
1?????56789??factory????400
2????101112??factory????500
3????131415??factory????600
4?????12345???retail??????1
5?????56789???retail??????2
6????101112???retail??????3
7????131415???retail??????4
現(xiàn)在想要還原為:
variable?factory?retail
zip_code???????????????
12345????????100??????1
56789????????400??????2
101112???????500??????3
131415???????600??????4
如何實(shí)現(xiàn)?
使用 pivot 方法很容易做到:
df_melt2.pivot(index='zip_code',columns='variable')
index 設(shè)定第一個(gè)軸,為 zip_code,columns 設(shè)定哪些列或哪個(gè)列的不同取值組合為一個(gè)軸,此處設(shè)定為 variable 列,它一共有 2 種不同的取值,分別為 factory, retail,pivot 透視后變?yōu)榱忻簿褪?axis = 1 的軸
pivot 方法沒有聚合功能,它的升級(jí)版為 pivot_table 方法,能對(duì)數(shù)據(jù)聚合。
18 pivot_table 使用小技巧
使用上面的 df_melt 演示不出聚合的功能:
zip_code?variable??value
0?????12345??factory????100
1?????56789??factory????400
2????101112??factory????500
3????131415??factory????600
4?????12345???retail??????1
5?????56789???retail??????2
6????101112???retail??????3
7????131415???retail??????4
因?yàn)?zip_code + variable 的組合都是唯一的,因此轉(zhuǎn)化一步,df_melt 基礎(chǔ)上再 append 它:
In?[77]:?dfa?=?df_melt2.append(df_melt2)?
數(shù)據(jù)變?yōu)椋?/p>
???zip_code?variable??value
0?????12345??factory????100
1?????56789??factory????400
2????101112??factory????500
3????131415??factory????600
4?????12345???retail??????1
5?????56789???retail??????2
6????101112???retail??????3
7????131415???retail??????4
0?????12345??factory????100
1?????56789??factory????400
2????101112??factory????500
3????131415??factory????600
4?????12345???retail??????1
5?????56789???retail??????2
6????101112???retail??????3
7????131415???retail??????4
此時(shí)前兩列組合存在重復(fù)項(xiàng),能夠演示出聚合的效果:
dfa.pivot_table(index='zip_code',columns='variable',aggfunc=np.sum)
index 設(shè)定第一個(gè)維度:zip_code,columns 設(shè)定第二個(gè)維度為 variable,使用 aggfunc 參數(shù)做聚合,也就是存在 zip_code + variable 重復(fù)項(xiàng)時(shí),兩項(xiàng) np.sum 累加,透視結(jié)果如下:
???????????value???????
variable?factory?retail
zip_code???????????????
12345????????200??????2
56789????????800??????4
101112??????1000??????6
131415??????1200??????8
