'EmployeeID': [1, 2, 3, 4, 5],
'Department': ['HR', 'IT', 'HR', 'IT', 'Finance'],
'Salary': [50000, 60000, 52000, 62000, 70000]
df = pd.DataFrame(data)
# 自定义函数,添加部门平均薪资列
def add_department_avg_salary(group):
group['DepartmentAvgSalary'] = group['Salary'].mean()
return group
# 使用groupby和apply添加部门平均薪资
df = df.groupby('Department').apply(add_department_avg_salary)
print(df)
定义自定义函数:
定义一个自定义函数 add_department_avg_salary,该函数接受一个分组的数据框,并计算该分组的平均薪资,将其添加为新列。
使用groupby和apply:
使用 groupby 按部门对数据进行分组,然后使用 apply 将自定义函数应用到每个分组。
2、groupby怎样计算每个部门薪资最高的3个员工
import pandas as pd
# 创建示例数据
data = {
'EmployeeID': [1, 2, 3, 4, 5, 6, 7],
'Department': ['HR', 'IT', 'HR', 'IT', 'Finance', 'IT', 'HR'],
'Salary': [50000, 60000, 52000, 62000, 70000, 61000, 53000]
df = pd.DataFrame(data)
# 自定义函数,获取每个部门最高薪资的前三个人的信息
def top_n_salaries(group, n=3):
return group.nlargest(n, 'Salary')
# 使用groupby和apply计算每个部门最高薪资的前三个人的信息
top_salaries = df.groupby('Department').apply(top_n_salaries).reset_index(drop=True)
print(top_salaries)
对于nlargest函数的解释:
nlargest 函数是 pandas 中用来从数据框或 Series 中选取具有最大值的前 n 个元素的函数。它可以应用于一列或多列,并且返回一个包含前 n 个最大值的子数据框或 Series。
DataFrame.nlargest(n, columns, keep='first')
Series.nlargest(n, keep='first')
n: 要返回的最大值数量。
columns: 要根据哪些列选取最大值(仅适用于 DataFrame)。
keep: 保留重复值的方式。默认值为 'first',表示保留前 n 个出现的最大值。可以选择:
'first': 保留前 n 个出现的最大值。
'last': 保留最后 n 个出现的最大值。
'all': 保留所有出现的最大值,如果存在重复值,返回的结果可能会多于 n 个。
3、pandas的groupby分组统计,基于groupby的agg和apply,这俩函数有什么区别
agg(aggregate):
agg 函数用于对分组后的数据进行聚合操作。它通常用于需要对每个分组应用多种聚合函数的情况。
agg 接受一个字符串、函数或函数列表作为参数,并对每个分组的数据进行聚合操作。
可以传入单个聚合函数,例如:mean、sum、max、min 等。
可以传入多个聚合函数,形成一个字典,指定不同列使用不同的聚合函数。
import pandas as pd
# 创建示例数据
df = pd.DataFrame({
'A': ['foo', 'foo', 'bar', 'bar'],
'B': [1, 2, 3, 4],
'C': [10, 20, 30, 40]
# groupby后使用agg进行聚合操作
result = df.groupby('A').agg({
'B': 'sum', # 对B列求和
'C': 'mean' # 对C列求平均值
print(result)
apply:
apply 函数用于对分组后的数据应用自定义函数。与 agg 不同,apply 允许你对每个分组的数据应用更复杂的操作,并返回任意形状的数据。apply 更灵活,但也可能较慢。
可以传入一个自定义函数,对每个分组的数据进行任意操作。
import pandas as pd
# 创建示例数据
df = pd.DataFrame({
'A': ['foo', 'foo', 'bar', 'bar'],
'B': [1, 2, 3, 4],
'C': [10, 20, 30, 40]
# 自定义函数,对每个分组的数据进行操作
def custom_func(group):
return group['B'].sum() + group['C'].mean()
# groupby后使用apply应用自定义函数
result = df.groupby('A').apply(custom_func)
print(result)
区别总结:
agg:主要用于对分组后的数据进行聚合操作,适用于需要对数据进行总结性统计的情况。
apply:用于对分组后的数据应用自定义操作,适用于需要更复杂的处理逻辑的情况。
Pandas引入报错: Questions Tags Users Companies LABS Jobs Discussions COLLECTIVES Communities for your favorite technologies. Explore all Collectives TEAMS Ask questions, find answers and collaborate at work with Stack Overflow for Teams. ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject