在处理series和Dataframe对象中的元素的时候,经常会用到一些逻辑运算函数; 那么这些逻辑运算怎么用?有哪些? 我认为这六个都比较重要!!!
apply函数可以用于Series或DataFrame对象,用于将自定义函数应用于每个元素或每一列/行。
假设我们有一个DataFrame对象 df,其中包含有工资数据,我们想对每一行的工资进行加倍操作。
- import pandas as pd
-
- data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
- 'Salary': [5000, 6000, 4000, 7000]}
- df = pd.DataFrame(data)
-
- def double_salary(salary):
- return salary * 2
-
- df['Doubled Salary'] = df['Salary'].apply(double_salary)
- print(df)
输出结果为:
- Name Salary Doubled Salary
- 0 Alice 5000 10000
- 1 Bob 6000 12000
- 2 Charlie 4000 8000
- 3 David 7000 14000
在上面的代码中,我们定义了一个自定义函数 double_salary,它接受一个参数 salary,并将工资值乘以2。然后,我们使用 apply 函数将该函数应用于 df['Salary'] 列的每个元素,并将结果存储在新的列 Doubled Salary 中。
map函数用于Series对象,它接受一个映射函数或字典,将其应用于Series中的每个元素,并返回一个新的Series对象。map函数通常用于对Series中的值进行一一映射或替换。
假设我们有一个Series对象 s,其中包含员工名字的首字母,并希望根据首字母映射关系替换为完整的名字。
-
- import pandas as pd
-
- data = {'Initial': ['A', 'B', 'C', 'D']}
- s = pd.Series(data['Initial'])
-
- name_mapping = {'A': 'Alice', 'B': 'Bob', 'C': 'Charlie', 'D': 'David'}
-
- s_mapped = s.map(name_mapping)
- print(s_mapped)
输出结果为:
- 0 Alice
- 1 Bob
- 2 Charlie
- 3 David
- dtype: object
在上面的代码中,我们定义了一个字典 name_mapping,其中键是首字母,值是完整的名字。然后,我们使用 map 函数将 name_mapping 应用于 s Series中的每个元素,并将返回的新映射值存储在 s_mapped Series中。
applymap函数可用于DataFrame对象,它将指定函数应用于DataFrame中的每个元素,并返回一个新的DataFrame对象。applymap函数通常用于对DataFrame中的每个元素进行一一映射或计算。
假设我们有一个DataFrame对象 df,其中包含有学生成绩数据,我们想将每个成绩乘以0.1,并保留两位小数。
-
- import pandas as pd
-
- data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
- 'Math': [90, 85, 95, 92],
- 'Science': [78, 80, 88, 85]}
- df = pd.DataFrame(data)
-
- def scale_grade(grade):
- return round(grade * 0.1, 2)
-
- df_scaled = df[['Math', 'Science']].applymap(scale_grade)
- print(df_scaled)
输出结果为:
- Math Science
- 0 9.0 7.80
- 1 8.5 8.00
- 2 9.5 8.80
- 3 9.2 8.50
在上面的代码中,我们定义了一个自定义函数 scale_grade,它接受一个成绩值,并将其乘以0.1,并使用 round 函数保留两位小数。然后,我们使用 applymap 函数将该函数应用于 df[['Math', 'Science']] 中的每个元素,并将结果存储在新的DataFrame df_scaled 中。
transform函数可用于Series或DataFrame对象,它按照指定的函数或操作将每个元素进行转换,返回一个与原始对象具有相同索引的新对象。
使用transform函数
假设我们有一个DataFrame对象 df,其中包含有学生名字和各科成绩,我们想计算每个学生的平均成绩,并将其添加为新的一列。
- import pandas as pd
-
- data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
- 'Math': [90, 85, 95, 92],
- 'Science': [78, 80, 88, 85]}
- df = pd.DataFrame(data)
-
- def calculate_average(row):
- return row.mean()
-
- df['Average'] = df[['Math', 'Science']].transform(calculate_average)
- print(df)
输出结果为:
-
- Name Math Science Average
- 0 Alice 90 78 84.0
- 1 Bob 85 80 82.5
- 2 Charlie 95 88 91.5
- 3 David 92 85 88.5
在上面的代码中,我们定义了一个自定义函数 calculate_average,它接受一行数据,并返回该行数据的平均值。然后,我们使用 transform 函数将该函数应用于 df[['Math', 'Science']] 中的每一行,并将结果存储在新的列 Average 中。
agg函数用于对DataFrame对象的每一列应用一个或多个聚合函数,并返回一个包含聚合结果的Series或DataFrame对象。
假设我们有一个DataFrame对象 df,其中包含有员工的工资和销售数据,我们想计算每个部门的平均工资和总销售额。
- import pandas as pd
-
- data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
- 'Department': ['HR', 'IT', 'Admin', 'IT'],
- 'Salary': [5000, 6000, 4000, 7000],
- 'Sales': [10000, 15000, 8000, 12000]}
- df = pd.DataFrame(data)
-
- agg_result = df.groupby('Department').agg({'Salary': 'mean', 'Sales': 'sum'})
- print(agg_result)
输出结果为:
-
- Salary Sales
- Department
- Admin 4000 8000
- HR 5000 10000
- IT 6500 27000
在上面的代码中,我们使用 groupby 函数将数据按照 Department 列进行分组。然后,我们使用 agg 函数来对每个分组应用聚合函数。通过传递一个字典,我们指定了要对 Salary 列应用 mean 函数,并对 Sales 列应用 sum 函数。最后,我们得到了一个包含每个部门的平均工资和总销售额的结果。
groupby函数用于在DataFrame对象中根据指定的列对数据进行分组。它将返回一个GroupBy对象,你可以在该对象上进行聚合、过滤和转换等操作。
假设我们有一个DataFrame对象 df,其中包含有学生名字、科目和成绩数据,我们想找出每个科目的最高分学生。
-
- import pandas as pd
-
- data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
- 'Subject': ['Math', 'Math', 'Science', 'Science', 'English', 'English'],
- 'Score': [90, 85, 92, 88, 95, 80]}
- df = pd.DataFrame(data)
-
- max_score_students = df.groupby('Subject')['Score'].idxmax()
- top_students = df.loc[max_score_students]
- print(top_students)
输出结果为:
- Name Subject Score
- 0 Alice Math 90
- 2 Charlie Science 92
- 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 对象,可以在该对象上进行聚合、过滤和转换等操作。通过这些函数,我们可以很方便地对数据进行自定义操作、映射、转换和聚合,以满足不同的数据处理需求。你可以根据具体的业务场景和数据类型使用这些函数,提高数据分析和处理的效率。