Python数据分析pandas之分组统计透视表
生活随笔
收集整理的這篇文章主要介紹了
Python数据分析pandas之分组统计透视表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python數據分析pandas之分組統計透視表
數據聚合統計
Padans里的聚合統計即是應用分組的方法對數據框進行聚合統計,常見的有min(最小)、max(最大)、avg(平均值)、sum(求和)、var()、std(標準差)、百分位數、中位數等。
數據框概覽
可以通過describe方法查看當前數據框里數值型的統計信息,主要包括條數、均值、標準差、最小值、25分位數、50分位數、75分位數、最大值方面的信息。
如果是查看某列的統計信息,在數據框下加“.”列名即可。
import pandas as pd df2=pd.DataFrame([["李四",32,'A',90],["王二",19,'B',78],["王三",34,'C',55],["劉七",35,'A',91]],columns=['name','age','level','score'],index=['no_001','no_002','no_003','no_006']) #查看所有數值列數據概況 print(df2.describe()) #查看age列的數據概況 print(df2.age.describe()) # 當然也可以指定percentiles,比如這里僅顯示百分之30、50分位數。 # print(df2.describe(percentiles=[0.3,0.5])) #結果age score count 4.000000 4.000000 mean 30.000000 78.500000 std 7.438638 16.743158 min 19.000000 55.000000 25% 28.750000 72.250000 50% 33.000000 84.000000 75% 34.250000 90.250000 max 35.000000 91.000000 count 4.000000 mean 30.000000 std 7.438638 min 19.000000 25% 28.750000 50% 33.000000 75% 34.250000 max 35.000000 Name: age, dtype: float64單獨查看統計信息
import pandas as pd df2=pd.DataFrame([["李四",32,'A',90],["王二",19,'B',78],["王三",34,'C',55],["劉七",35,'A',91]],columns=['name','age','level','score'],index=['no_001','no_002','no_003','no_006']) #查看所有數值列數據詳情,分開統計 print(df2.age.count(),df2.age.mean(),df2.age.std(),df2.age.min(),df2.age.quantile(0.25),df2.age.quantile(0.5),df2.age.quantile(0.75),df2.age.sum()) #結果 4 30.0 7.438637868140466 19 28.75 33.0 34.25 120按照某一列分組統計
#這里按照等級列進行分組,以求最大值為例,其它的聚合函數類似。import pandas as pd df2=pd.DataFrame([["李四",32,'A',90],["王二",19,'B',78],["王三",34,'C',55],["劉七",35,'A',91],["麻六",34,'A',83]],columns=['name','age','level','score'],index=['no_001','no_002','no_003','no_004','no_005']) #查看等級列的聚合(最大值)情況 print(df2.groupby('level').max()) #結果 name age score level A 麻六 35 91 B 王二 19 78 C 王三 34 55按照多列分組統計
多列(兩列以上)分組統計,當前以等級、排名列為例,聚合函數是最大值(max)。
import pandas as pd df2=pd.DataFrame([["李四",32,'A',90,2,1500,300],["王二",19,'B',78,2,1300,200],["王三",34,'C',55,1,1250,235],["劉七",35,'A',91,3,1000,100],["麻六",34,'A',83,3,900,400]],columns=['name','age','level','score','rn','income','bouns'],index=['no_001','no_002','no_003','no_004','no_005']) # 按照默認列分組取最大值 #print(df2.groupby(['level','rn']).max()) ##指定列(age)分組取最大值 print(df2.groupby(['level','rn']).age.max()) #print(df2.groupby(['level','rn'])['age'].max())#等同于上式 #結果name age score income bouns level rn A 2 李四 32 90 1500 300 3 麻六 35 91 1000 400 B 2 王二 19 78 1300 200 C 1 王三 34 55 1250 235 level rn A 2 32 3 35 B 2 19 C 1 34 Name: age, dtype: int64分組統計結合APPLY
通過APPLY結合lambda表達式生成新列,生成的對象是Series,如有需要可以轉換為DataFrame。
import pandas as pd df2=pd.DataFrame([["李四",32,'A',90,2,1500,300],["王二",19,'B',78,2,1300,200],["王三",34,'C',55,1,1250,235],["劉七",35,'A',91,3,1000,100],["麻六",34,'A',83,3,900,400]],columns=['name','age','level','score','rn','income','bouns'],index=['no_001','no_002','no_003','no_004','no_005']) #通過APPLY結合lambda表達式生成新列 df_apply = pd.DataFrame(df2.groupby(['level', 'rn'], as_index=False).apply(lambda x: sum(x['income'])/sum(x['income']+x['bouns'])),columns=['rate']) df_fin= df_apply.reset_index() print(df_fin) #結果,這里level和rn是索引。rate level rn A 2 0.833333 3 0.791667 B 2 0.866667 C 1 0.841751分組統計結合APPLY與索引重建
通過APPLY結合lambda表達式生成新列,生成的對象是Series,因為groupby里的分組字段會轉為索引,要變為列,需要通過reset_index方法。
import pandas as pd df2=pd.DataFrame([["李四",32,'A',90,2,1500,300],["王二",19,'B',78,2,1300,200],["王三",34,'C',55,1,1250,235],["劉七",35,'A',91,3,1000,100],["麻六",34,'A',83,3,900,400]],columns=['name','age','level','score','rn','income','bouns'],index=['no_001','no_002','no_003','no_004','no_005']) #通過APPLY結合lambda表達式生成新列 df_apply = pd.DataFrame(df2.groupby(['level', 'rn'], as_index=False).apply(lambda x: sum(x['income'])/sum(x['income']+x['bouns'])),columns=['rate']) df_fin= df_apply.reset_index() print(df_fin) #結果level rn rate 0 A 2 0.833333 1 A 3 0.791667 2 B 2 0.866667 3 C 1 0.841751透視表pivot_table
通過pivot_table實現以姓名(name)為索引,不同級別最小值(min)、收入(income)總和為列的交叉表。
import pandas as pd df2=pd.DataFrame([["李四",32,'A',90,2,1500,300],["王二",19,'B',78,2,1300,200],["王三",34,'C',55,1,1250,235],["劉七",35,'A',91,3,1000,100],["麻六",34,'A',83,3,900,400]],columns=['name','age','level','score','rn','income','bouns'],index=['no_001','no_002','no_003','no_004','no_005']) print(df2.pivot_table(index='name',columns=["level"],aggfunc={'age':max,'income':sum})) #結果age income level A B C A B C name 劉七 35.0 NaN NaN 1000.0 NaN NaN 李四 32.0 NaN NaN 1500.0 NaN NaN 王三 NaN NaN 34.0 NaN NaN 1250.0 王二 NaN 19.0 NaN NaN 1300.0 NaN 麻六 34.0 NaN NaN 900.0 NaN NaN總結
以上是生活随笔為你收集整理的Python数据分析pandas之分组统计透视表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python数据分析pandas之数据拼
- 下一篇: pos机晚上刷到帐时间