日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python数据分析pandas之分组统计透视表

發布時間:2024/9/27 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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之分组统计透视表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。