Python數據分析中Groupby用法之通過字典或Series進行分組


在數據分析中有時候需要自己定義分組規則 這里簡單介紹一下用一個字典實現分組

people=DataFrame(
np.random.randn(5,5),
columns=['a','b','c','d','e'],
index=['Joe','Steve','Wes','Jim','Travis']
)
mapping={'a':'red','b':'red','c':'blue','d':'blue','e':'red','f':'orange'}
by_column=people.groupby(mapping,axis=1)#列方向上進行分組
這里不知道python底層是怎么運行的,最好把運行的結果打印出來看一下
for i in by_column:
print (i)

遍歷的結果:
('blue',   c         d
Joe     0.218189 -0.228336
Steve   1.677264  0.630303
Wes     0.315320 -0.250787
Jim     3.343462  0.483021
Travis  0.854553 -0.760884)
('red',     a         b         e
Joe     0.218164  0.823654 -1.425720
Steve   1.191175 -0.327735  1.926470
Wes    -1.418855  0.497466  0.110105
Jim    -1.157157  0.817122  0.749023
Travis -0.440583 -0.907922  1.374294)

從結果可以看到,把a b e分給了red, c d分給了blue
 a   b   e--->red

c  d --->blue
接下來再來執行 people.groupby(mapping,axis=1).mean()
            blue       red
Joe     0.241336 -0.182099
Steve   0.459773 -0.448336
Wes     0.205278  0.605721
Jim    -0.094838  1.254174
Travis  0.354140  0.142075
從結果看到在列方向group分組 執行聚合函數mean()后列索引就只有 blue和red了。
整個過程可以這么理解 在列方向上進行分組 a b e為一組為red,c d 為一組為blue。最后以red blue作為新DataFraem的列索引

同樣Series也有同樣的功能,它可以被看作一個固定大小的映射。對於上面的那個例子,如果用series作為分組鍵,則pandas會檢查Series以確保其索引分組軸是對齊的:
ser=Series(mapping)
a       red
b       red
c      blue
d      blue
e       red
f    orange
by_ser_group=people.groupby(ser,axis=1).mean()
            blue       red
Joe     0.241336 -0.182099
Steve   0.459773 -0.448336
Wes     0.205278  0.605721
Jim    -0.094838  1.254174
Travis  0.354140  0.142075
從結果可以看到,通過字典進行分組和通過Series進行分組結果是相同的。也就是說他們執行的原理是相同的,都是把索引(對series來說)或字典的key與Dataframe的索引進行匹配,
字典中value或series中values值相同的會被分到一個組中,最后根據每組進行在聚合。
groupby的用法很多,之后有時間我會慢慢更新博客。如果有那些地方有錯歡迎大家指出,一塊學習,共同進步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM