網站首頁 編程語言 正文
分組:根據研究目的,將所有樣本點按照一個或多個屬性劃分為多個組,就是分組。
pandas中,數據表就是DataFrame對象,分組就是groupby方法。將DataFrame中所有行按照一列或多列來劃分,分為多個組,列值相同的在同一組,列值不同的在不同組。
分組后,就得到一個groupby對象,代表著已經被分開的各個組。后續所有的動作,比如計數,求平均值等,都是針對這個對象,也就是都是針對各個組。即在每個組組內進行計數,求平均值等。
分組的返回結果
df = pd.DataFrame([['a', 'man', 120, 90],
? ? ? ? ? ? ? ? ? ?['b', 'woman', 130, 100],
? ? ? ? ? ? ? ? ? ?['a', 'man', 110, 108],
? ? ? ? ? ? ? ? ? ?['a', 'woman', 120, 118]], columns=['level', 'gender', 'math','chinese'])
group = df.groupby('gender')
df.groupby() 函數返回的對象是一系列鍵值對,其中鍵是分組的字段值,值是該字段值下的數據表。分組的結果是無法直接輸出的,print()只能看到該結果的數據類型。可以用循環對分組后的結果進行遍歷。
print(group)
# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x11cb60f50>
for key, value in group:
print(key)
print(value)
print("")
man
level gender math chinese
0 a man 120 90
2 a man 110 108
woman
level gender math chinese
1 b woman 130 100
3 a woman 120 118
按一列分組:df.groupby(column)
group = df.groupby('gender') # 按照'gender'列的值來分組,創建一個groupby對象
# group = df.groupby(['gender']) # 等價寫法
for key, df in group:
print(key)
print(df)
man
level gender math chinese
0 a man 120 90
2 a man 110 108
woman
level gender math chinese
1 b woman 130 100
3 a woman 120 118
按多列分組:df.groupby([column1, column2])
group = df.groupby(['gender', 'level'])
# 先按照'grade'列的值來分組。每組內,再按'level'列來分組。也返回一個groupby對象
for key, value in group:
print(key)
print(value)
print("")
('man', 'a')
level gender math chinese
0 a man 120 90
2 a man 110 108
('woman', 'a')
level gender math chinese
3 a woman 120 118
('woman', 'b')
level gender math chinese
1 b woman 130 100
查看每組的統計數據:df.groupby(column).describe()
對數據表中的數值列進行統計,給出包括count = 計數,mean = 平均數,std = 方差,min = 最小值,25% = 四分位數,50% = 二分位數,75% = 四分之三分位數,max = 最大值的信息。不會對非數值列統計。
返回的是一個dataframe。
查看所有列的統計信息
group = df.groupby(['gender'])
df1 = group.describe()
# df1 = df.groupby(['gender']).describe() # 等價寫法
print(type(df1))
print(df1)
<class 'pandas.core.frame.DataFrame'>
math chinese \
count mean std min 25% 50% 75% max count
gender
man 2.0 115.0 7.071068 110.0 112.5 115.0 117.5 120.0 2.0
woman 2.0 125.0 7.071068 120.0 122.5 125.0 127.5 130.0 2.0
mean std min 25% 50% 75% max
gender
man 99.0 12.727922 90.0 94.5 99.0 103.5 108.0
woman 109.0 12.727922 100.0 104.5 109.0 113.5 118.0
查看指定列的統計信息
group = df.groupby(['gender'])
df1 = group.describe()['math'] # 只看math列的統計信息
print(df1)
count mean std min 25% 50% 75% max
gender
man 2.0 115.0 7.071068 110.0 112.5 115.0 117.5 120.0
woman 2.0 125.0 7.071068 120.0 122.5 125.0 127.5 130.0
查看縱向視圖
unstack()可以將每列的統計信息垂直排列。
group = df.groupby(['gender'])
df1 = group.describe().unstack()
print(df1)
gender
math count man 2.000000
woman 2.000000
...
max man 120.000000
woman 130.000000
chinese count man 2.000000
woman 2.000000
...
woman 113.500000
max man 108.000000
woman 118.000000
dtype: float64
組內離散列計數:df.groupby(column)[column2].value_counts()
數據表中的列按值是否連續,可以分為連續值列、離散值列。對于離散值列,可以統計其不重復值的個數。對于連續值列,統計不重復值一般沒有意義。統計結果是一個Series對象。
group = df.groupby(['gender'])
df1 = group['level'].value_counts() # 統計'level'列的不重復值個數
print(type(df1))
print(df1)
<class 'pandas.core.series.Series'>
gender level
man a 2
woman a 1
b 1py
Name: level, dtype: int64
組內數值列和:df.groupby(column).sum()
group = df.groupby(['gender'])
df1 = group.sum()
print(df1)
math chinese
gender
man 230 198
woman 250 218
組內成員數:df.groupby(column).count()
每組內,按列統計每組的成員數。每列的統計結果是一樣的
group = df.groupby(['gender'])
df1 = group.count()
print(df1)
level math chinese
gender
man 2 2 2
woman 2 2 2
組內數值列均值:df.groupby(column).mean()
每組內,統計所有數值列的均值,非數值列無均值。
所有組的均值
group = df.groupby(['gender'])
df1 = group.mean()
print(df1)
math chinese
gender
man 115 99
woman 125 109
單組的均值
group = df.groupby(['gender'])
df1 = group['math'].mean()
print(df1)
gender
man 115
woman 125
Name: math, dtype: int64
組內數值列最大值:df.groupby(column).max()
每組內,統計所有數值列的最大值,非數值列無最大值
統計所有數值列的最大值
group = df.groupby(['gender'])
df1 = group.max()
print(df1)
level math chinese
gender
man a 120 108
woman b 130 118
統計單個數值列的最大值
group = df.groupby(['gender'])
df1 = group['math'].max()
print(df1)
gender
man 120
woman 130
Name: math, dtype: int64
組內應用函數:df.groupby(column1)[column2].apply()
group = df.groupby(['gender'])
df1 = group['math'].apply(np.mean) # 求組內均值
print(df1)
gender
man 115.0
woman 125.0
Name: math, dtype: float64
組內不同列用不同函數:df.groupby(column).agg({column1:func, column2:func,…})
group = df.groupby(['gender'])
df1 = group.agg({'math':np.mean, 'chinese':np.std})
print(df1)
math chinese
gender
man 115 12.727922
woman 125 12.727922
總結
原文鏈接:https://blog.csdn.net/HTDiiii/article/details/127000069
相關推薦
- 2022-05-09 pytorch中的hook機制register_forward_hook_python
- 2022-03-11 Golang如何讀取單行超長的文本詳解_Golang
- 2022-12-12 C語言中單鏈表(不帶頭結點)基本操作的實現詳解_C 語言
- 2022-03-23 C語言新手初階教程之三子棋實現_C 語言
- 2022-03-17 C++游戲編程之模擬實現鍵盤打字程序_C 語言
- 2023-07-14 css 實現塊標簽上下左右居中
- 2021-11-12 C/C++?Qt?StatusBar底部狀態欄應用教程_C 語言
- 2022-06-01 C語言超詳細講解字符串相乘_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支