3.10 std() ---- 标准差
总体标准差是反映研究总体内个体之间差异程度的一种统计指标。
总体标准差计算公式:
S = ∑ ( X i − X ˉ ) 2 n S=\sqrt{\frac{\sum\left(X_{i}-\bar{X}\right)^{2}}{n}}S=n∑(Xi−Xˉ)2
由于总体标准差计算出来会偏小,所以采用( n − d d o f ) (n-ddof)(n−ddof)的方式适当扩大标准差,即样本标准差。
样本标准差计算公式:
S = ∑ ( X i − X ˉ ) 2 n − d d o f S=\sqrt{\frac{\sum\left(X_{i}-\bar{X}\right)^{2}}{n-ddof}}S=n−ddof∑(Xi−Xˉ)2
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data) print(df) print() # 总体标准差 print(df.std()) print(df.std(axis=0)) print(df.std(axis=1))
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data) print(df) print() # 样本标准差 print(df.std(ddof=1)) print(df.std(axis=0,ddof=1)) print(df.std(axis=1,ddof=1))
3.11 describe() ---- 统计 DataFrame 的常见统计学指标结果
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data) print(df) print() print(df.describe())
3.12 corr() ---- 求每列之间的相关系数矩阵
相关系数:描述两组样本的相关程度的大小
相关系数:协方差除去两组样本标准差的乘积,是一个 [-1, 1] 之间的数
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data) print(df) print() print(df.corr())
3.12 cov() ---- 求每列之间的协方差矩阵
协方差:可以评估两组统计数据的相关性
协方差正为正相关,负为反相关。绝对值越大,相关性越强。
计算方法:
- 计算两组样本的均值
- 计算两组样本中的各个元素与均值的差
- 协方差为 两组数据离差的乘积的均值
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data) print(df) print() print(df.cov())
3.13 sort_values() ---- 根据元素值进行排序
参数:
- by:指定排序参照的字段
- ascending:True为升序(默认),False为降序
- axis:排序的方向, 0 - 对行进行排序(默认),1 - 对列进行排序
3.13.1 升序
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data, index=['a','b','c','d'], columns=['aa','bb','cc']) print(df) print() # 根据 aa 列对数据进行升序排列 print(df.sort_values(by=['aa'])) # 根据 a 行对数据进行升序排列 print(df.sort_values(by=['a'],axis=1)) # 根据 a 行对数据进行升序排列 print(df.sort_values(by=['a'],axis=1, ascending=True))
3.13.2 降序
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data, index=['a','b','c','d'], columns=['aa','bb','cc']) print(df) print() # 根据 aa 列对数据进行降序排列 print(df.sort_values(by=['aa'], ascending=False)) # 根据 a 行对数据进行降序排列 print(df.sort_values(by=['a'],axis=1, ascending=False))
3.14 sort_index() ---- 根据索引值进行排序
参数:
- ascending:True为升序(默认),False为降序
- axis:排序的方向, 0 - 对行进行排序(默认),1 - 对列进行排序
3.14.2 升序
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data, index=['b','a','d','e'], columns=['cc','aa','bb']) print(df) print() # 默认对行索引进行升序排列 print(df.sort_index()) # 对行索引进行升序排列 print(df.sort_index(axis=0)) # 对列索引进行升序排列 print(df.sort_index(axis=1))
3.14.2 降序
data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data, index=['b','a','d','e'], columns=['cc','aa','bb']) print(df) print() # 默认对行索引进行降序排列 print(df.sort_index(ascending=False)) # 对行索引进行降序排列 print(df.sort_index(axis=0,ascending=False)) # 对列索引进行降序排列 print(df.sort_index(axis=1,ascending=False))
3.15 apply() ---- 根据传入的函数参数处理 DataFrame 对象
3.15.1 对每列进行处理
def func(x): print(x.values) return pd.Series(np.arange(0,x.size)) data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data, index=['b','a','d','e'], columns=['cc','aa','bb']) print(df) print() # 默认对每列进行处理,一次处理一列 # 会返回一个原数组处理后的新数组,不会修改原数组 res = df.apply(func) print(res) print(df)
3.15.2 对每行进行处理
def func(x): print(x.values) return pd.Series(np.arange(0,x.size)) data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data, index=['b','a','d','e'], columns=['cc','aa','bb']) print(df) print() res = df.apply(func, axis=1) print(res) print(df)
3.16 applymap() ---- 根据传入的函数参数处理 DataFrame 对象的每个元素
按列的方向遍历每个元素进行处理,返回一个处理后的新数组,不会修改原数组。
def func(x): print(x, end=' ') if(x>85): return 999 else: return 0 data = np.floor(np.random.normal(85, 3, (4,3))) df = pd.DataFrame(data, index=['b','a','d','e'], columns=['cc','aa','bb']) print(df) print() res = df.applymap(func) print() print(res) print(df)
3.17 groupby() ---- 对 DataFrame 对象中的数据进行分组
参数:
- by:指定分组的依据,可以接收的参数类型 list、string、mapping、generator
- axis:操作的轴向,默认对行进行操作,默认为0,接收
- as_index:表示聚合后的聚合标签是否以DataFrame索引形式输出,默认为True
- sort:表示是否对分组依据分组标签进行排序,默认为True
返回 Groupby 对象:
- Groupby.get_group(‘A’):返回A组的详细数据
- Groupby.size():返回每一组的频数
数据:
left = pd.DataFrame({ 'student_id':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20], 'student_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung', 'Billy', 'Brian', 'Bran', 'Bryce', 'Betty', 'Emma', 'Marry', 'Allen', 'Jean', 'Rose', 'David', 'Tom', 'Jack', 'Daniel', 'Andrew'], 'class_id':[1,1,1,2,2,2,3,3,3,4,1,1,1,2,2,2,3,3,3,2], 'gender':['M', 'M', 'F', 'F', 'M', 'M', 'F', 'F', 'M', 'M', 'F', 'F', 'M', 'M', 'F', 'F', 'M', 'M', 'F', 'F'], 'age':[20,21,22,20,21,22,23,20,21,22,20,21,22,23,20,21,22,20,21,22], 'score':[98,74,67,38,65,29,32,34,85,64,52,38,26,89,68,46,32,78,79,87]}) left right = pd.DataFrame({'class_id':[1,2,3,5], 'class_name': ['ClassA', 'ClassB', 'ClassC', 'ClassE']}) right data = pd.merge(left, right, how='inner', on='class_id')