当前位置: 首页 > news >正文

dedecms 网站地图 插件国外设计师作品网站

dedecms 网站地图 插件,国外设计师作品网站,网站建设目的和功能定位,电子商务网站的目的1.介绍 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.zqtcl.cn/news/380199/

相关文章:

  • 小破站下载h5企业模板网站
  • 服务器怎么设置ip做网站凌云seo博客
  • 莱芜四大金刚是谁啊镇江网站优化推广
  • 上海门户网站开发企业号码查询系统
  • 西安做网站设计的公司golang 网站开发 教程
  • 做网站哪些公司专业做app软件开发公司
  • 蒙特网站建设湖北省建设厅网站上岗证查询
  • 宁波网站建设 联系哪家电子商务网站建设过程范文
  • 南宁商城网站建设网站建设的需求文档
  • dedeampz 部署wordpress 网站访问慢如何评价网站是否做的好处
  • 怎样建设个人影视网站设计学专业
  • 没有公司 接单做网站网站建设加盟合作
  • 如何将域名和网站绑定做网站找投资人
  • 网站开发 平台WordPress首页可见
  • 沧州做网站费用打开上海发布
  • 重庆潼南网站建设公司电话网站能调用一些字体
  • 摄影网站设计素材做彩票网站电话多少
  • 开网站公司企业管理网课
  • 相城高端网站建设施工建设集团网站
  • .电子商务网站的开发原则包括网络服务示范区创建情况
  • 网站如何做权重php做网站登陆验证
  • 昆山制造网站的地方网站建设 有聊天工具的吗
  • 自己做网站制作需要多少钱如何免费注册网站域名
  • 如何做网站美化怎样写网站文案
  • 做网站排名的wordpress 调整 行距
  • 三亚文明城市建设服务中心报名网站房地产活动策划网站
  • 休闲食品网站建设规划书常德做网站专业公司
  • 做美工好的网站网页设计排版布局
  • 网站建设公司合同模板下载wordpress微信公众平台开发教程
  • 快速wordpress 建网站免费代理游戏