速戰速決 Python - python 第三方庫(pandas): DataFrame篩選和分組
阿新 • • 發佈:2022-01-20
速戰速決 Python - python 第三方庫(pandas): DataFrame篩選和分組
速戰速決 Python https://github.com/webabcd/PythonSample
作者 webabcd
速戰速決 Python - python 第三方庫(pandas): DataFrame篩選和分組
示例如下:
thirdLib/pandas/sample4.py
# pandas # DataFrame 篩選和分組 import pandas as pd data = { "age": [40, 25, 22, 28, 28], "gender": ['M', 'F', 'M', 'M', 'F'], "city": ['beijing', 'beijing', 'shanghai', 'beijing', 'shanghai'] } index = pd.Index(['zhao', 'qian', 'sun', 'li', 'zhou']) a = pd.DataFrame(data=data, index=index) print(a) ''' age gender city zhao 40 M beijing qian 25 F beijing sun 22 M shanghai li 28 M beijing zhou 28 F shanghai ''' # 按照索引正序排序 print(a.sort_index()) # 按照索引倒序排序 print(a.sort_index(ascending=False)) # 按照指定欄位和指定順序排序 print(a.sort_values(by="age", ascending=False)) # 先按 city 排序,再按 age 排序 print(a.sort_values(by=["city", "age"])) # 取前 n 條資料 print(a.head(2)) # 取後 n 條資料 print(a.tail(2)) # 獲取 age 欄位最大的前 2 條資料 print(a.nlargest(2, 'age')) # 獲取 age 欄位最小的前 2 條資料 print(a.nsmallest(2, 'age')) # 取索引 zhao 和 sun 的資料 print(a.loc[['zhao', 'sun']]) # 取索引 zhao 到 sun 之間的資料 print(a.loc['zhao':'sun']) # 取 age 列和 city 列的全部資料 print(a.loc[:, ["age", "city"]]) # 取索引 zhao 和 sun 的 age 列到 city 列之間的資料 print(a.loc[['zhao', 'sun'], "age":"city"]) # 取位置 0 和 3 的資料 print(a.iloc[[0,3]]) # 取位置 0 到 2 的資料 print(a.iloc[0:3]) # 取第 1 行到第 3 行,第 1 列到第 2 列的資料 print(a.iloc[0:3, 0:2]) ''' age gender zhao 40 M qian 25 F sun 22 M ''' # 取 age 大於 30 且 gender 是 M 的資料 # & 和 # | 或 # ~ 非 print(a[(a.age>30) & (a.gender=='M')]) # 取 age 大於 30 的只包含 age 列的資料 print(a.loc[a.age>30, ["age"]]) # 取 city 為 beijing 或 shanghai 的資料 print(a[a.city.isin(["beijing", "shanghai"])]) # 取索引為 zhao 的資料 print(a[a.index.isin(["zhao"])]) # 以下用於演示如何對陣列做分組 # 依據 gender 分組 b = a.groupby("gender") # 依據 gender 和 city 的聯合值分組 c = a.groupby(["gender", "city"]) # 獲取全部分組資料 print(b.groups) # {'F': ['qian', 'zhou'], 'M': ['zhao', 'sun', 'li']} print(c.groups) # {('F', 'beijing'): ['qian'], ('F', 'shanghai'): ['zhou'], ('M', 'beijing'): ['zhao', 'li'], ('M', 'shanghai'): ['sun']} # 遍歷分組 for name, group in b: print(name) print(group) ''' F age gender city qian 25 F beijing zhou 28 F shanghai M age gender city zhao 40 M beijing sun 22 M shanghai li 28 M beijing ''' # 分組統計(更多功能需要藉助 numpy 庫,比如統計平均值可以用 numpy.mean) # 統計不同 gender 分組的相同年齡的數量 print(b["age"].agg(len)) ''' gender F 2 M 3 ''' # 統計不同 gender 分組的最大年齡 print(b["age"].agg(max)) ''' gender F 28 M 40 ''' # 統計不同 gender 分組的年齡的累加值和最大值(可以指定統計後的列名) print(b["age"].agg([sum, max]).rename(columns={"sum":"mySum", "max":"myMax"})) ''' mySum myMax gender F 53 28 M 90 40 ''' # 支援同時對分組資料的不同欄位做統計(可以指定統計後的列名) print(b.agg({"age":sum}).rename(columns={"age": "myAge"})) ''' myAge gender F 53 M 90 '''
速戰速決 Python https://github.com/webabcd/PythonSample
作者 webabcd