• 数据分析Pandas专栏---第四章<Pandas几个处理元素的函数>


    前言:

    处理series和Dataframe对象中的元素的时候,经常会用到一些逻辑运算函数; 那么这些逻辑运算怎么用?有哪些?  我认为这六个都比较重要!!!

    正文:

    1.apply

    apply函数可以用于Series或DataFrame对象,用于将自定义函数应用于每个元素或每一列/行。

    1. 对于Series对象,apply函数可以将函数应用于每个元素;
    2. 对于DataFrame对象,apply函数可以将函数应用于每一列或每一行。

    案例:

    假设我们有一个DataFrame对象 df,其中包含有工资数据,我们想对每一行的工资进行加倍操作。

    1. import pandas as pd
    2. data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    3.         'Salary': [5000, 6000, 4000, 7000]}
    4. df = pd.DataFrame(data)
    5. def double_salary(salary):
    6.     return salary * 2
    7. df['Doubled Salary'] = df['Salary'].apply(double_salary)
    8. print(df)

    输出结果为:

    1.       Name  Salary  Doubled Salary
    2. 0    Alice    5000           10000
    3. 1      Bob    6000           12000
    4. 2  Charlie    4000            8000
    5. 3    David    7000           14000

    在上面的代码中,我们定义了一个自定义函数 double_salary,它接受一个参数 salary,并将工资值乘以2。然后,我们使用 apply 函数将该函数应用于 df['Salary'] 列的每个元素,并将结果存储在新的列 Doubled Salary 中。

    2.map

    map函数用于Series对象,它接受一个映射函数或字典,将其应用于Series中的每个元素,并返回一个新的Series对象。map函数通常用于对Series中的值进行一一映射或替换。

    案例:

    假设我们有一个Series对象 s,其中包含员工名字的首字母,并希望根据首字母映射关系替换为完整的名字。

    1. import pandas as pd
    2. data = {'Initial': ['A', 'B', 'C', 'D']}
    3. s = pd.Series(data['Initial'])
    4. name_mapping = {'A': 'Alice', 'B': 'Bob', 'C': 'Charlie', 'D': 'David'}
    5. s_mapped = s.map(name_mapping)
    6. print(s_mapped)

    输出结果为:

    1. 0      Alice
    2. 1        Bob
    3. 2    Charlie
    4. 3      David
    5. dtype: object

    在上面的代码中,我们定义了一个字典 name_mapping,其中键是首字母,值是完整的名字。然后,我们使用 map 函数将 name_mapping 应用于 s Series中的每个元素,并将返回的新映射值存储在 s_mapped Series中。

    3.applymap

    applymap函数可用于DataFrame对象,它将指定函数应用于DataFrame中的每个元素,并返回一个新的DataFrame对象。applymap函数通常用于对DataFrame中的每个元素进行一一映射或计算。

    案例:


    假设我们有一个DataFrame对象 df,其中包含有学生成绩数据,我们想将每个成绩乘以0.1,并保留两位小数。

    1. import pandas as pd
    2. data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    3.         'Math': [90, 85, 95, 92],
    4.         'Science': [78, 80, 88, 85]}
    5. df = pd.DataFrame(data)
    6. def scale_grade(grade):
    7.     return round(grade * 0.1, 2)
    8. df_scaled = df[['Math', 'Science']].applymap(scale_grade)
    9. print(df_scaled)

    输出结果为:

    1.    Math  Science
    2. 0   9.0     7.80
    3. 1   8.5     8.00
    4. 2   9.5     8.80
    5. 3   9.2     8.50

    在上面的代码中,我们定义了一个自定义函数 scale_grade,它接受一个成绩值,并将其乘以0.1,并使用 round 函数保留两位小数。然后,我们使用 applymap 函数将该函数应用于 df[['Math', 'Science']] 中的每个元素,并将结果存储在新的DataFrame df_scaled 中。

    4.transform

    transform函数可用于Series或DataFrame对象,它按照指定的函数或操作将每个元素进行转换,返回一个与原始对象具有相同索引的新对象。

    案例:

    使用transform函数
    假设我们有一个DataFrame对象 df,其中包含有学生名字和各科成绩,我们想计算每个学生的平均成绩,并将其添加为新的一列。

    1. import pandas as pd
    2. data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    3.         'Math': [90, 85, 95, 92],
    4.         'Science': [78, 80, 88, 85]}
    5. df = pd.DataFrame(data)
    6. def calculate_average(row):
    7.     return row.mean()
    8. df['Average'] = df[['Math', 'Science']].transform(calculate_average)
    9. print(df)

    输出结果为:

    1.       Name  Math  Science  Average
    2. 0    Alice    90       78     84.0
    3. 1      Bob    85       80     82.5
    4. 2  Charlie    95       88     91.5
    5. 3    David    92       85     88.5

    在上面的代码中,我们定义了一个自定义函数 calculate_average,它接受一行数据,并返回该行数据的平均值。然后,我们使用 transform 函数将该函数应用于 df[['Math', 'Science']] 中的每一行,并将结果存储在新的列 Average 中。

    5.agg

    agg函数用于对DataFrame对象的每一列应用一个或多个聚合函数,并返回一个包含聚合结果的Series或DataFrame对象。

    案例:


    假设我们有一个DataFrame对象 df,其中包含有员工的工资和销售数据,我们想计算每个部门的平均工资和总销售额。

    1. import pandas as pd
    2. data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    3.         'Department': ['HR', 'IT', 'Admin', 'IT'],
    4.         'Salary': [5000, 6000, 4000, 7000],
    5.         'Sales': [10000, 15000, 8000, 12000]}
    6. df = pd.DataFrame(data)
    7. agg_result = df.groupby('Department').agg({'Salary': 'mean', 'Sales': 'sum'})
    8. print(agg_result)

    输出结果为:

    1.             Salary  Sales
    2. Department               
    3. Admin         4000   8000
    4. HR            5000  10000
    5. IT            6500  27000

    在上面的代码中,我们使用 groupby 函数将数据按照 Department 列进行分组。然后,我们使用 agg 函数来对每个分组应用聚合函数。通过传递一个字典,我们指定了要对 Salary 列应用 mean 函数,并对 Sales 列应用 sum 函数。最后,我们得到了一个包含每个部门的平均工资和总销售额的结果。

    6.groupby

    groupby函数用于在DataFrame对象中根据指定的列对数据进行分组。它将返回一个GroupBy对象,你可以在该对象上进行聚合、过滤和转换等操作。

    案例: 


    假设我们有一个DataFrame对象 df,其中包含有学生名字、科目和成绩数据,我们想找出每个科目的最高分学生。

    1. import pandas as pd
    2. data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
    3.         'Subject': ['Math', 'Math', 'Science', 'Science', 'English', 'English'],
    4.         'Score': [90, 85, 92, 88, 95, 80]}
    5. df = pd.DataFrame(data)
    6. max_score_students = df.groupby('Subject')['Score'].idxmax()
    7. top_students = df.loc[max_score_students]
    8. print(top_students)

    输出结果为:

    1.      Name  Subject  Score
    2. 0   Alice     Math     90
    3. 2  Charlie  Science     92
    4. 4     Eva  English     95

    在上面的代码中,我们使用 groupby 函数将数据按照 Subject 列进行分组。然后,我们使用 idxmax 函数找到每个分组中得分最高的学生的索引。最后,我们使用 loc 函数将这些学生的记录选取出来,得到了每个科目的最高分学生信息。

    总结:

    介绍 pandas 库中的几个重要函数:apply、map、applymap、transform、agg 和 groupby,并给出了详细的案例来说明它们的用法。

    • apply 函数可以在 Series 和 DataFrame 对象上应用自定义函数,对每个元素或每一列/行进行操作。
    • map 函数用于 Series 对象,在元素级别上进行映射或替换操作,可以根据映射关系将一些值替换为其他值。
    • applymap 函数适用于 DataFrame 对象,它用于对每个元素执行指定的函数,将函数应用于整个 DataFrame。
    • transform 函数适用于 Series 或 DataFrame 对象,按照指定的函数或操作对每个元素进行转换,并返回具有相同索引的新对象。
    • agg 函数用于在 DataFrame 对象的每一列上应用一个或多个聚合函数,返回包含聚合结果的 Series 或 DataFrame 对象。
    • groupby 函数用于根据指定的列将数据进行分组,返回一个 GroupBy 对象,可以在该对象上进行聚合、过滤和转换等操作。

    通过这些函数,我们可以很方便地对数据进行自定义操作、映射、转换和聚合,以满足不同的数据处理需求。你可以根据具体的业务场景和数据类型使用这些函数,提高数据分析和处理的效率。

  • 相关阅读:
    ros-python学习样例笔记
    Unity 动画系统(Animation,Animator,Timeline)
    spring cloud gateway+nacos 服务下线感知延迟,未及时出现503,请求依然转发到下线服务
    基于SSM的北海旅游网站设计与实现
    深入Ansible
    国家高新技术企业,哪些情况将被取消资格?
    总结git常用命令
    实现简易负载式均衡在线判题系统
    体验 win10 下 oceanbase 数据库
    nodejs--开发自己的项目——1--路由模块、路由处理函数模块、服务器的创建
  • 原文地址:https://blog.csdn.net/m0_56758840/article/details/136265173