企业网站和信息化建设重庆建站模板展示
企业网站和信息化建设,重庆建站模板展示,app模板大全,wordpress投票插件wp-polls1.介绍 1.1 Pandas是什么? Pandas是一个基于NumPy的分析结构化数据的工具集#xff0c;NumPy为其提供了高性能的数据处理能力。Pandas被普遍用于数据挖掘和数据分析#xff0c;同时也提供数据清洗、数据I/O、数据可视化等辅助功能。 Github_Star 40k : https://github.com/… 1.介绍 1.1 Pandas是什么? Pandas是一个基于NumPy的分析结构化数据的工具集NumPy为其提供了高性能的数据处理能力。Pandas被普遍用于数据挖掘和数据分析同时也提供数据清洗、数据I/O、数据可视化等辅助功能。 Github_Star 40k : https://github.com/pandas-dev/pandas 中文文档: https://www.pypandas.cn/docs/ 官方文档: https://pandas.pydata.org/docs/getting_started/comparison/index.html 1.2 安装 # 使用Anaconda$ conda install pandas# 使用pip $ pip install pandas 2.数据结构 学习Pandas之前一般都需要先了解下其对应的数据结构方便后面理解和使用,DataFrame(数据框)和Series(序列)是Pandas库中两个最基本、最重要的数据结构。它们提供了灵活且高效的数据操作方法使得数据分析和处理变得更加简单和可行。 Series(序列): 是一种类似于一维数组的数据结构它可以存储任意类型的数据并附带有标签 label这些标签可以用于索引。 Series可以看作是由两个数组组成一个是数据值的数组一个是与之相关的标签的数组。 DataFrame: 是一个表格型的数据结构包含有一组有序的列每列可以是不同的值类型(数值、字符串、布尔型等) DataFrame即有行索引也有列索引可以被看做是由 Series组成的字典。 2.1 Series Series是一个对象其对应的构造函数所需参数如下: def __init__( self, dataNone, indexNone, dtype: Dtype | None None, nameNone, copy: bool | None None, fastpath: bool False,) 1.参数说明 data: 指的是输入数据当输入数据类型不同时,会有不同的操作,如下: 如果是一个数组如列表或 NumPy 数组那么它将成为 Series 的数据。 如果是一个字典字典的键将成为 Series 的索引字典的值将成为 Series 的数据。 如果是一个标量值它将被广播到整个 Series。 index: 指定Series 的索引;如果不提供将创建默认的整数索引,从0开始。 dtype: 指定Series的数据类型; 如果不提供将自动推断数据类型。 name: 为Series 指定一个名称。 copy: 如果为True则复制输入数据。默认情况下不复制。 注意: Series的所有数据都是同一种数据类型. 2. 使用示例 import numpy as npimport pandas as pdif __name__ __main__: # -------------- 基于标量创建Series -------------- print(基于标量-默认索引-s_var: \n, pd.Series(18, names_var, dtypenp.float32)) print(基于标量-指定索引-s_var2: \n, pd.Series(18, names_var2, dtypenp.float32, index[小花])) print(------------------------分割线----------------------------) # -------------- 基于列表创建Series -------------- list_var [Go, Python, PHP, Java] s_list pd.Series(list_var, names_list) print(基于列表-默认索引-s_list: \n, s_list) # 指定索引 index_var [a, b, c, d] s_list2 pd.Series(list_var, indexindex_var, names_list2) print(基于列表-指定索引-s_list2: \n, s_list2) print(------------------------分割线----------------------------) # -------------- 基于字典创建Series -------------- dict_var {a: Go, b: Python, c: PHP, d: Java} s_dict pd.Series(dict_var, names_dict) print(基于字典-s_dict: \n, s_dict) print(------------------------分割线----------------------------) # -------------- 基于np创建Series -------------- s_np pd.Series(np.arange(5, 10), names_np) print(基于numpy-s_np: \n, s_np) 基于标量-默认索引-s_var: 0 18.0Name: s_var, dtype: float32基于标量-指定索引-s_var2: 小花 18.0Name: s_var2, dtype: float32------------------------分割线----------------------------基于列表-默认索引-s_list: 0 Go1 Python2 PHP3 JavaName: s_list, dtype: object基于列表-指定索引-s_list2: a Gob Pythonc PHPd JavaName: s_list2, dtype: object------------------------分割线----------------------------基于字典-s_dict: a Gob Pythonc PHPd JavaName: s_dict, dtype: object------------------------分割线----------------------------基于numpy-s_np: 0 51 62 73 84 9Name: s_np, dtype: int64 注意: 当指定索引(index)参数时,需要保证索引的数量和输入数据的数量保持一致否则会报错: ValueError: Length of values (..) does not match length of index (..) 2.2 DataFrame DataFrame可以看作多个Series的集合每个Series都可以拥有各自独立的数据类型因此DataFrame没有自身唯一的数据类型自然也就没有dtype属性了。不过DataFrame多了一个dtypes属性这个属性的类型是Series类。除了dtypes属性DataFrame的values属性、index属性、columns属性也都非常重要。 DataFrame对应的构造函数如下: def __init__( self, dataNone, index: Axes | None None, columns: Axes | None None, dtype: Dtype | None None, copy: bool | None None,) 1. 参数说明 data: 指的是输入数据当输入数据类型不同时,会有不同的操作,如下: 如果是一个字典字典的值可以是列表、数组或其他字典它们将成为 DataFrame 的列。 如果是一个数组或列表它将被转换为二维数组每一行将成为 DataFrame 的一行。 如果是另一个 DataFrame则将创建一个副本。 index: 指定DataFrame 的索引;如果不提供将创建默认的整数索引,从0开始。 columns: 指定 DataFrame 的列索引。如果不提供将使用字典的键如果数据是字典或整数序列。 dtype: 指定DataFrame的数据类型; 如果不提供将自动推断数据类型。 copy: 如果为True则复制输入数据。默认情况下不复制。 2. 使用示例 import numpy as npimport pandas as pdif __name__ __main__: # 使用字典创建DataFrame data_dict {Name: [Alice, Bob, Charlie], Age: [25, 30, 35], City: [New York, San Francisco, Los Angeles]} df_dict pd.DataFrame(data_dict) print(1.使用字典创建DataFrame: \n, df_dict) # 使用NumPy数组创建DataFrame data_numpy np.array([[1, Alice], [2, Bob], [3, Charlie]]) df_numpy pd.DataFrame(data_numpy, columns[ID, Name]) print(2.使用NumPy数组创建DataFrame: \n, df_numpy) # 使用另一个DataFrame创建DataFrame data_existing_df {Name: [Alice, Bob, Charlie], Age: [25, 30, 35], City: [New York, San Francisco, Los Angeles]} existing_df pd.DataFrame(data_existing_df) # 创建新的DataFrame复制已存在的DataFrame df_existing_df pd.DataFrame(existing_df) print(3.使用DataFrame创建DataFrame:, df_existing_df) # 属性信息打印 print(# ---------------- 属性信息打印 ----------------) print(DataFrame.dtypes:\n, df_existing_df.dtypes) print(DataFrame.values:, df_existing_df.values) print(DataFrame.index:, df_existing_df.index) print(DataFrame.columns:, df_existing_df.columns) 1.使用字典创建DataFrame: Name Age City0 Alice 25 New York1 Bob 30 San Francisco2 Charlie 35 Los Angeles2.使用NumPy数组创建DataFrame: ID Name0 1 Alice1 2 Bob2 3 Charlie3.使用DataFrame创建DataFrame: Name Age City0 Alice 25 New York1 Bob 30 San Francisco2 Charlie 35 Los Angeles# ---------------- 属性信息打印 ----------------DataFrame.dtypes: Name objectAge int64City objectdtype: objectDataFrame.values: [[Alice 25 New York] [Bob 30 San Francisco] [Charlie 35 Los Angeles]]DataFrame.index: RangeIndex(start0, stop3, step1)DataFrame.columns: Index([Name, Age, City], dtypeobject) 3.基础用法 从数据结构构成上我们知道DataFrame是由多个Series的组成, 在实际使用中也是使用DataFrame的场景居多所以后续主要学习DataFrame数据结构的使用 3.1 准备数据 import pandas as pdif __name__ __main__: # 使用字典创建DataFrame data_dict { 成绩: [90, 88, 80, 95], 年龄: [23, 19, 20, 33], 身高: [175, 165, 170, 173], 体重: [71.5, 50.5, 66.5, 75.3], 城市: [北京, 南京, 上海, 上海], } names [小明, 小英, 李思, 王老五] data_res pd.DataFrame(data_dict, indexnames) print(学员信息:\n, data_res)学员信息: 成绩 年龄 身高 体重 城市小明 90 23 175 71.5 北京小英 88 19 165 50.5 南京李思 80 20 170 66.5 上海王老五 95 33 173 75.3 上海 3.2 访问数据 if __name__ __main__: # data_res 参考准备数据此处省略.... # 使用head和tail获取头尾数据 head_data data_res.head(1) print(------ 第一行: ------\n, data_res.head(1)) print(------ 最后一行: ------\n, data_res.tail(1)) # 类似切片操作 print(------ data_res[1:3]: ------ \n, data_res[1:3]) # 返回某一行 print(------ 返回某一行,小英数据: ------ \n, data_res[小英:小英]) # 返回某一列 print(------ 返回某一列所有城市: ------ \n, data_res[城市]) # 同时选择行和列 print(------ 同时选择行和列小明、李思的成绩和年龄: ------ \n, data_res.loc[[小明, 李思], [成绩, 年龄]]) # 条件选择 print(------ 条件选择| 年龄20: ------ \n, data_res[data_res[年龄] 20]) search_a data_res[(data_res[城市] 上海) (data_res[成绩] 80)] print(------ 条件选择| 城市上海 成绩 80: ------ \n, search_a) # 访问具体值 print(------ 根据标签,访问具体值-王老五的身高: , data_res.at[王老五, 身高]) print(------ 根据位置,访问具体值-王老五的身高: , data_res.iat[3, 2]) ------ 第一行: ------ 成绩 年龄 身高 体重 城市小明 90 23 175 71.5 北京------ 最后一行: ------ 成绩 年龄 身高 体重 城市王老五 95 33 173 75.3 上海------ data_res[1:3]: ------ 成绩 年龄 身高 体重 城市小英 88 19 165 50.5 南京李思 80 20 170 66.5 上海------ 返回某一行,小英数据: ------ 成绩 年龄 身高 体重 城市小英 88 19 165 50.5 南京------ 返回某一列所有城市: ------ 小明 北京小英 南京李思 上海王老五 上海Name: 城市, dtype: object------ 同时选择行和列小明、李思的成绩和年龄: ------ 成绩 年龄小明 90 23李思 80 20------ 条件选择| 年龄20: ------ 成绩 年龄 身高 体重 城市小英 88 19 165 50.5 南京------ 条件选择| 城市上海 成绩 80: ------ 成绩 年龄 身高 体重 城市王老五 95 33 173 75.3 上海------ 根据标签,访问具体值-王老五的身高: 173------ 根据位置,访问具体值-王老五的身高: 173 3.3 编辑数据 import pandas as pdif __name__ __main__: # data_res 参考准备数据此处省略.... # 根据标签变更 print(#-------------- 修改具体值 -------------------) print(标签赋值--变更前小英年龄:, data_res.at[小英, 年龄]) data_res.at[小英, 年龄] 18 print(标签赋值--变更后小英年龄:, data_res.at[小英, 年龄]) # 根据位置变更 print(位置赋值--变更前小英年龄:, data_res.iat[1, 1]) data_res.iat[1, 1] 24 print(位置赋值--变更后小英年龄:, data_res.iat[1, 1]) print(#-------------- 修改整列值 -------------------) print(修改整列值--变更前:, data_res[成绩]) data_res[成绩] 100 print(修改整列值--变更后:, data_res[成绩])#-------------- 修改具体值 -------------------标签赋值--变更前小英年龄: 19标签赋值--变更后小英年龄: 18位置赋值--变更前小英年龄: 18位置赋值--变更后小英年龄: 24#-------------- 修改整列值 -------------------修改整列值--变更前: 小明 90小英 88李思 80王老五 95Name: 成绩, dtype: int64修改整列值--变更后: 小明 100小英 100李思 100王老五 100Name: 成绩, dtype: int64 3.4 追加删除 import pandas as pdif __name__ __main__: # data_res 参考准备数据此处省略.... # 增加一列 data_res[爱好] [旅游, 游戏, 篮球, 学习] print(------------------ 增加一列: ------------------ \n , data_res) # 删除一列 new_data data_res.drop([城市, 成绩, 体重], axis1) print(------------------drop 删除多列: ------------------ \n , new_data) # 使用pd.concat连接两个dataframe new_row {成绩: 100, 年龄: 30, 身高: 185, 体重: 80.5, 城市: 蜀国, 爱好: 练武} new_dataframe pd.DataFrame([new_row], index[赵云]) data_res_new pd.concat([data_res, new_dataframe]) print(------------------ 增加行后: ------------------ \n , data_res) # 使用drop也可以删除行 new_data data_res_new.drop([小明, 王老五], axis0) print(------------------drop 删除多行: ------------------ \n , new_data) ------------------ 增加一列: ------------------ 成绩 年龄 身高 体重 城市 爱好小明 90 23 175 71.5 北京 旅游小英 88 19 165 50.5 南京 游戏李思 80 20 170 66.5 上海 篮球王老五 95 33 173 75.3 上海 学习------------------drop 删除多列: ------------------ 年龄 身高 爱好小明 23 175 旅游小英 19 165 游戏李思 20 170 篮球王老五 33 173 学习------------------ 增加行后: ------------------ 成绩 年龄 身高 体重 城市 爱好小明 90 23 175 71.5 北京 旅游小英 88 19 165 50.5 南京 游戏李思 80 20 170 66.5 上海 篮球王老五 95 33 173 75.3 上海 学习------------------drop 删除多行: ------------------ 成绩 年龄 身高 体重 城市 爱好小英 88 19 165 50.5 南京 游戏李思 80 20 170 66.5 上海 篮球赵云 100 30 185 80.5 蜀国 练武 函数说明: drop: 用于删除行或列的函数。它可以在 DataFrame 或 Series 上使用用于删除指定的行或列并返回一个新的对象原始对象保持不变。 axis 参数用于指定是删除行还是列其中 axis0 表示行 axis1 表示列。默认情况下 axis0。 concat: 将数据沿着某个轴进行拼接可以按行拼接垂直拼接或按列拼接水平拼接使用参数 axis 指定拼接的轴 axis0 表示按行拼接垂直拼接 axis1 表示按列拼接水平拼接 默认是按照行拼接。 3.5 排序数据 import pandas as pdif __name__ __main__: # data_res 参考准备数据此处省略.... # 根据年龄排序 by_age_asc data_res.sort_values(by年龄, ascendingTrue) print(-------------------- 根据年龄升序排序(原始数据不变) --------------------:\n, by_age_asc) # 根据成绩降序排序inplaceTrue会修改原始数据 data_res.sort_values(by成绩, ascendingFalse, inplaceTrue) print(-------------------- 根据成绩降序排序(修改原始数据) --------------------:\n, data_res) # 根据多列排序,先按照年龄再根据成绩 by_age_score data_res.sort_values(by[年龄, 成绩], ascendingFalse) print(-------------------- 根据多列排序(先按年龄再根据成绩) --------------------:\n, by_age_score) # 使用rank排序返回当前数据在所属列的排名名次 rank_data data_res.rank(ascendingFalse) print(------------- 使用rank排序,返回当前数据在所属列的排名名次 : -------------\n, rank_data)-------------------- 根据年龄升序排序(原始数据不变) --------------------: 成绩 年龄 身高 体重 城市小英 88 19 165 50.5 南京李思 80 20 170 66.5 上海小明 90 23 175 71.5 北京王老五 95 33 173 75.3 上海-------------------- 根据成绩降序排序(修改原始数据) --------------------: 成绩 年龄 身高 体重 城市王老五 95 33 173 75.3 上海小明 90 23 175 71.5 北京小英 88 19 165 50.5 南京李思 80 20 170 66.5 上海-------------------- 根据多列排序(先按年龄再根据成绩) --------------------: 成绩 年龄 身高 体重 城市王老五 95 33 173 75.3 上海小明 90 23 175 71.5 北京李思 80 20 170 66.5 上海小英 88 19 165 50.5 南京------------- 使用rank排序,返回当前数据在所属列的排名名次 : ------------- 成绩 年龄 身高 体重 城市王老五 1.0 1.0 2.0 1.0 3.5小明 2.0 2.0 1.0 2.0 2.0小英 3.0 4.0 4.0 4.0 1.0李思 4.0 3.0 3.0 3.0 3.5 函数说明: sort_values 函数用于排序 DataFrame 或 Series ,具体参数如下: def sort_values( self, by: IndexLabel, *, axis: Axis 0, ascending: bool | list[bool] | tuple[bool, ...] True, inplace: bool False, kind: str quicksort, na_position: str last, ignore_index: bool False, key: ValueKeyFunc None,) - DataFrame | None: by: 指定排序的列名或列名的列表。如果是多个列可以传递一个包含多个列名的列表。按照列表中的列的顺序进行排序。 axis: 指定排序的轴 axis0 表示按行排序 axis1 表示按列排序。默认为 0。 ascending: 指定排序的顺序 True 表示升序 False 表示降序。可以是一个布尔值或布尔值的列表用于指定每个列的排序顺序。默认为 True。 inplace: 如果为 True则在原地修改对象而不返回新对象如果为 False默认则返回一个新对象原对象保持不变。 kind: 指定排序算法的种类可选值有 quicksort(快速排序)、mergesort(归并排序)、heapsort(堆排序);默认为 quicksort。 na_position: 指定缺失值的位置可选值有 first在前和 last在后。默认为 last。 ignore_index: 如果为 True则重新设置索引忽略现有索引。默认为 False。 key: 用于排序的函数可以是函数、类实例或类的方法。如果指定将用该函数的返回值进行排序。 4.数据运算 4.1 数据摘要 import pandas as pdif __name__ __main__: # 创建DataFrame data_dict { 水果: [香蕉, 苹果, 葡萄, 橘子], 进货价: [1.25, 0.56, 3.5, 1.15], 最低价: [1.55, 0.80, 4.0, 2.00], 最高价: [3.45, 1.5, 6.5, 4.15], 数量: [600, 500, 400, 500], } fruit_data pd.DataFrame(data_dict) print(--------------- 原始数据 -----------------) print(fruit_data) print(--------------- 查看数据的统计摘要 -----------------) print(fruit_data.describe())--------------- 原始数据 ----------------- 水果 进货价 最低价 最高价 数量0 香蕉 1.25 1.55 3.45 6001 苹果 0.56 0.80 1.50 5002 葡萄 3.50 4.00 6.50 4003 橘子 1.15 2.00 4.15 500--------------- 查看数据的统计摘要 ----------------- 进货价 最低价 最高价 数量count 4.00000 4.000000 4.00000 4.000000mean 1.61500 2.087500 3.90000 500.000000std 1.29302 1.367708 2.06438 81.649658min 0.56000 0.800000 1.50000 400.00000025% 1.00250 1.362500 2.96250 475.00000050% 1.20000 1.775000 3.80000 500.00000075% 1.81250 2.500000 4.73750 525.000000max 3.50000 4.000000 6.50000 600.000000 输出结果说明: count: 非缺失值的数量。 mean: 平均值。 std: 标准差衡量数据的离散程度。 min: 最小值。 25%: 第一四分位数数据中的 25% 的值小于此值。 50%: 中位数第二四分位数数据中的中间值。 75%: 第三四分位数数据中的 75% 的值小于此值。 max: 最大值。 4.2 统计运算 import pandas as pdif __name__ __main__: # 创建DataFrame data_dict { 水果: [香蕉, 苹果, 葡萄, 橘子], 进货价: [1.25, 0.56, 3.5, 1.15], 最低价: [1.55, 0.80, 4.0, 2.00], 最高价: [3.45, 1.5, 6.5, 4.15], 数量: [600, 500, 400, 500], } fruit_data pd.DataFrame(data_dict) print(--------------- 原始数据 -----------------) print(fruit_data) print(--------------- 均值运算 -----------------) print([数量]这一列均值: , fruit_data[数量].mean()) print([进货价]这一列均值: , fruit_data[进货价].mean()) print(--------------- 极值运算 -----------------) print([进货价]这一列最小值: , fruit_data[进货价].min()) print([进货价]这一列最大值: , fruit_data[进货价].max()) print(--------------- 累和运算 -----------------) # 数量和进货价这两列累和运算 print(fruit_data[[数量, 进货价]].cumsum()) print(--------------- 广播运算-数量列减半 -----------------) fruit_data[数量] fruit_data[数量] / 2 print(fruit_data) --------------- 原始数据 ----------------- 水果 进货价 最低价 最高价 数量0 香蕉 1.25 1.55 3.45 6001 苹果 0.56 0.80 1.50 5002 葡萄 3.50 4.00 6.50 4003 橘子 1.15 2.00 4.15 500--------------- 均值运算 -----------------[数量]这一列均值: 500.0[进货价]这一列均值: 1.6150000000000002--------------- 极值运算 -----------------[进货价]这一列最小值: 0.56[进货价]这一列最大值: 3.5--------------- 累和运算 ----------------- 数量 进货价0 600 1.251 1100 1.812 1500 5.313 2000 6.46--------------- 广播运算-数量列减半 ----------------- 水果 进货价 最低价 最高价 数量0 香蕉 1.25 1.55 3.45 300.01 苹果 0.56 0.80 1.50 250.02 葡萄 3.50 4.00 6.50 200.03 橘子 1.15 2.00 4.15 250.0 4.3 自定义函数 apply() 函数的存在可以让我更灵活的处理数据它可以接收一个我们实现的函数然后对数据进行自定义处理具体参数如下: def apply( self, func: AggFuncType, axis: Axis 0, raw: bool False, result_type: Literal[expand, reduce, broadcast] | None None, args(), **kwargs,): func: 要应用的函数。可以是函数、字符串函数名称、 NumPy 函数或字典。 axis: 指定应用函数的轴 axis0 表示按列默认 axis1 表示按行。 raw: 如果为 True则将每一行或列作为一维数组传递给函数。如果为 False默认则将每一行或列作为 Series 传递给函数。 result_type: 指定返回结果的数据类型可以是 expand、reduce、broadcast 或 None。默认为 None。 args: 传递给函数的位置参数。 **kwargs: 传递给函数的关键字参数。 import randomimport pandas as pddef custom_compute(x: pd.Series): 变更指定列信息 :param x: :return: # 这里接受的是Series if x.name 最低价: return x random.randint(1, 100) / 100 elif x.name 数量: return x * 1.5 return xdef total_cost(x: pd.Series): 计算总成本 :param x: :return: money x[进货价] * x[数量] print({} 进货价:{} 数量:{} 成本:{}.format(x[水果], x[进货价], x[数量], money)) return moneyif __name__ __main__: # 创建DataFrame data_dict { 水果: [香蕉, 苹果, 葡萄, 橘子], 进货价: [1.25, 0.56, 3.5, 1.15], 最低价: [1.55, 0.80, 4.0, 2.00], 最高价: [3.45, 1.5, 6.5, 4.15], 数量: [600, 500, 400, 500], } fruit_data pd.DataFrame(data_dict) print(--------------- 原始数据 -----------------) print(fruit_data) print(--------------- 自定义函数运算:最低价加上随机数数量*1.5 -----------------) new_data fruit_data.apply(custom_compute) print(new_data) print(--------------- 自定义函数运算:计算变更后的总成本 -----------------) total_money new_data.apply(total_cost, axis1).sum() print(变更后的总成本:, total_money) --------------- 原始数据 ----------------- 水果 进货价 最低价 最高价 数量0 香蕉 1.25 1.55 3.45 6001 苹果 0.56 0.80 1.50 5002 葡萄 3.50 4.00 6.50 4003 橘子 1.15 2.00 4.15 500--------------- 自定义函数运算:最低价加上随机数数量*1.5 ----------------- 水果 进货价 最低价 最高价 数量0 香蕉 1.25 1.86 3.45 900.01 苹果 0.56 1.11 1.50 750.02 葡萄 3.50 4.31 6.50 600.03 橘子 1.15 2.31 4.15 750.0--------------- 自定义函数运算:计算变更后的总成本 -----------------香蕉 进货价:1.25 数量:900.0 成本:1125.0苹果 进货价:0.56 数量:750.0 成本:420.00000000000006葡萄 进货价:3.5 数量:600.0 成本:2100.0橘子 进货价:1.15 数量:750.0 成本:862.4999999999999变更后的总成本: 4507.5 4.4 分组运算 通过函数 groupby,可以按照某一列或多列的值将数据集分成多个组并在这些组上应用各种操作。 import randomimport pandas as pdif __name__ __main__: # 创建DataFrame 科目 names [小明, 小丽, 小龙, 小花] dates [2023-05, 2023-06, 2023-07, 2023-08, 2023-09, 2023-10] subjects [语文, 数学, 英语] rows 5 data_dict { 姓名: [random.choice(names) for _ in range(rows)], 日期: [random.choice(dates) for _ in range(rows)], 学科: [random.choice(subjects) for _ in range(rows)], 成绩: [random.randint(60, 100) for _ in range(rows)], } data pd.DataFrame(data_dict) print(-------------- 原始数据 ------------------) print(data) print(-------------- 根据姓名分组 ------------------) for name, group in data.groupby(姓名): print( 姓名:{} \n.format(name)) print(group) print(-------------- 分组后统计总分数 ------------------) sum_data data.groupby(姓名)[成绩].sum() print(sum_data) print(-------------- 分组后,针对多列执行不同的统计 ------------------) agg_data data.groupby(姓名).agg({成绩: [max, mean, min], 学科: count}) print(agg_data) -------------- 原始数据 ------------------ 姓名 日期 学科 成绩0 小丽 2023-05 数学 761 小龙 2023-06 数学 742 小花 2023-09 英语 623 小丽 2023-05 英语 684 小明 2023-10 语文 87-------------- 根据姓名分组 ------------------ 姓名:小丽 姓名 日期 学科 成绩0 小丽 2023-05 数学 763 小丽 2023-05 英语 68 姓名:小明 姓名 日期 学科 成绩4 小明 2023-10 语文 87 姓名:小花 姓名 日期 学科 成绩2 小花 2023-09 英语 62 姓名:小龙 姓名 日期 学科 成绩1 小龙 2023-06 数学 74-------------- 分组后统计总分数 ------------------姓名小丽 144小明 87小花 62小龙 74Name: 成绩, dtype: int64-------------- 分组后,针对多列执行不同的统计 ------------------ 成绩 学科 max mean min count姓名 小丽 76 72.0 68 2小明 87 87.0 87 1小花 62 62.0 62 1小龙 74 74.0 74 1 本文由 mdnice 多平台发布
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92628.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!