3.17.1 分组
# 根据 class_id 进行分组 grouped = data.groupby(by='class_id') # 获取 class_id 为1的组 print(grouped.get_group(1))
# 根据 class_id 与 gender 进行分组 grouped = data.groupby(by=['class_id', 'gender']) # # 获取 class_id gender 为(1, 'M')的组 print(grouped.get_group((1, 'M')))
print(grouped.size())
3.17.1 聚合
# 根据 class_id 进行分组 grouped = data.groupby(by='class_id') # 统计每个班级的平均分 # 传入的字典对应的值为处理的方式 print(grouped.agg({'score': np.mean}))
# 统计每个班级的平均分, 以及么每个班级的年龄最大值 print(grouped.agg({'score':np.mean, 'age':np.max}))
print(grouped.agg({'score':[np.mean, np.max, np.min], 'age':np.max}))
3.18 pivot_table() ---- 生成DataFrame对象的透视表
参数:
- index:分组所依据的列
- values:指定需要聚合统计的列
- columns:指定列,依据该列的每个值进行分列统计
- margins:是否对透视表的每行每列进行汇总统计
- aggfunc:聚合要执行的操作
# 根据 class_id 进行分组 # 默认求分组后能进行均值计算的列的均值 print(data.pivot_table(index='class_id') )
# 根据 class_id 进行分组 # 对分组后的数据 score 的聚合操作,默认求均值 print(data.pivot_table(index='class_id', values='score') )
# 根据 class_id gender 进行分组 # 对分组后的数据 score 的聚合操作,默认求均值 # 依据 age 列的每个值进行分列统计 print( data.pivot_table( index=['class_id', 'gender'], values='score', columns=['age'] ) )
# 根据 class_id gender 进行分组 # 对分组后的数据 score 的聚合操作,默认求均值 # 依据 age 列的每个值进行分列统计 # 对透视表的每行每列进行汇总统 print( data.pivot_table( index=['class_id', 'gender'], values='score', columns=['age'], margins=True ) )
print( data.pivot_table( index=['class_id', 'gender'], values='score', columns=['age'], margins=True, aggfunc='max' ) )
3.19 drop_duplicates ---- 处理重复值
属性:
- subset:接收 string 或 序列 为参数,表示要进行去重的列,默认为None,表示全部的列(只有当一行中所有的列一样,才会对该行进行去重)
- keep:接收 string 为参数,表示重复时保留第几个数据。first:保留第一个。last:保留最后一个。false:只要有重复都不保留。默认为first。
- inplace:表示是否在原表上进行修改。默认为False。
默认情况下,对所有的列进行去重,不在原表上进行修改,有重复值时默认保留重复值的第一个。
l = [ np.array([1,2,3]), np.array([1,1,2]), np.array([1,1,2]), np.array([1,1,1]) ] df = pd.DataFrame(l) print(df) print() print(df.drop_duplicates()) print() print(df)
l = [ np.array([1,2,3]), np.array([1,1,2]), np.array([1,1,2]), np.array([1,1,1]) ] df = pd.DataFrame(l) print(df) print() # 在原表上进行修改,无返回值 # 不在原表上进行修改,会返回修改后的新表 print(df.drop_duplicates(subset=[0,1], inplace=True, keep='last')) print() print(df)
3.20 isnull() ---- 判断是否为缺失值
l = [ pd.Series([1,2,3], index=['a', 'b', 'c']), pd.Series([1,3], index=['a', 'c']), pd.Series([2,3], index=['b', 'c']) ] df = pd.DataFrame(l) print(df) print() print(df.isnull())
3.21 notnull() ---- 判断是否不为缺失值
l = [ pd.Series([1,2,3], index=['a', 'b', 'c']), pd.Series([1,3], index=['a', 'c']), pd.Series([2,3], index=['b', 'c']) ] df = pd.DataFrame(l) print(df) print() print(df.notnull())