12 ,df 高级 :自定义函数,聚合函数( pivot

    技术2026-08-21  8

    1 ,未成年人数 :data[data[“Age”] >= 18][“Age”]

    目的 : 求未成年人数 ( 113 )实验 : 先测试真实值是多少 if __name__ == '__main__': # 读文件 csv : data = pd.read_csv("titanic_train.csv") # 我们需要的数据 : cols = ["PassengerId","Pclass","Fare","Survived","Sex","Age"] data = data[cols] # 空值处理 : 全部去掉,删除行,还剩下的数据 (714, 6) data = data.dropna(axis=0) data_age = data[data["Age"] >= 18]["Age"] print(data_age.size) data_age = data[data["Age"] < 18]["Age"] print(data_age.size) ===================================== 601 113

    2 ,自定义聚合函数,求未成年人数 : data.pivot_table

    目的 : 求每个船舱等级的未成年人数注意 : 自定义函数,接收到的是 Series代码 : # Author:SFL import numpy as np import pandas as pd import pandas.core.frame if __name__ == '__main__': # 读文件 csv : data = pd.read_csv("titanic_train.csv") # 我们需要的数据 : cols = ["PassengerId","Pclass","Fare","Survived","Sex","Age"] data = data[cols] # 空值处理 : 全部去掉,删除行,还剩下的数据 (714, 6) data = data.dropna(axis=0) # col 是具体的数值,对于我们的 Age 来说,col 是具体的元素 def count_cld(col:pd.core.frame.Series): # col 是 Series ,每一组的数据在一起 n = 0 for i in col: if i < 18: n=n+1 return n # 聚合运算 : 每个等级有多少未成年 res = data.pivot_table(index="Pclass",values="Age",aggfunc=count_cld) print(res) ========================================= Age Pclass 1 12.0 2 23.0 3 78.0

    3 ,自定义转换函数,未成年幸存率 : data.apply(adulorcld,axis=1)

    目的 : 查看是否成年,与是否幸存的关系思路 : 1 ,自定义函数 : 用是否达到 18 岁,来确定是否成年 2 ,得到新的列 : 得到是否成年列 3 ,加入 : 将新的列,加入到原来的数据中 4 ,聚合计算 : 得到是否成年与是否幸存的关系代码 : if __name__ == '__main__': # 读文件 csv : data = pd.read_csv("titanic_train.csv") # 我们需要的数据 : cols = ["PassengerId","Pclass","Fare","Survived","Sex","Age"] data = data[cols] # 空值处理 : 全部去掉,删除行,还剩下的数据 (714, 6) data = data.dropna(axis=0) # col 是具体的数值,对于我们的 Age 来说,col 是具体的元素 def adulorcld(row): age = row["Age"] if age>=18: return "adult" else: return "cld" # 将数据离散化,得到是否成年列 col_adcl = data.apply(adulorcld,axis=1) # 检查数据 : 714 个数据,没少 # print(col_adcl.size) data["adcl"] = col_adcl # 求幸存率 : 用聚合函数 pivot_table res = data.pivot_table(index="adcl",values="Survived",aggfunc=np.mean) print(res) ========================================================= Survived adcl adult 0.381032 cld 0.539823
    Processed: 0.010, SQL: 9