pandas中的apply方法使用
apply
用于对 DataFrame 或 Series 中的数据进行逐行或逐列的操作。它可以接受一个函数(通常是 lambda
函数或自定义函数),并将该函数应用到每一行或每一列上。apply
语法:
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
-
func
:要应用的函数。可以是lambda
函数、自定义函数或内置函数。 -
axis
:默认是0,将函数应用到每一列
axis = 1
表示将函数应用到每一行 -
raw
:默认是
False
,将每一行或每一列作为 Series 传递给函数。raw = True
,表示将每一行或每一列作为 NumPy 数组传递给函数。
对每一列应用函数
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
result = df.apply(sum)
print(result)
# A 6
# B 15
# dtype: int64
对每一行应用函数
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
result = df.apply(sum, axis=1)
print(result)
# 0 5
# 1 7
# 2 9
# dtype: int64
使用lambda
函数
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 对每一行计算 A 和 B 的乘积
result = df.apply(lambda row: row['A'] * row['B'], axis=1)
print(result)
# 0 4
# 1 10
# 2 18
# dtype: int64
使用自定义函数
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 自定义函数:计算 A 和 B 的平方和
def square_sum(row:pd.Series) -> int:
return row['A'] ** 2 + row['B'] ** 2
# 对每一行应用自定义函数
result = df.apply(square_sum, axis=1)
print(result)
# 0 17
# 1 29
# 2 45
# dtype: int64
apply
是逐行或逐列操作的,因此在处理大规模数据时可能较慢。在处理大规模数据时,需注意性能问题,尽量使用向量化操作。
力扣上的pandas题:1873. 计算特殊奖金 - 力扣(LeetCode)
编写解决方案,计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以
'M'
开头,那么他的奖金是他工资的100%
,否则奖金为0
。
解题思路就是使用apply方法。
import pandas as pd
def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
employees['bonus'] = employees.apply(
lambda x: x['salary'] if x['employee_id'] % 2 == 1 and not x['name'].startswith('M') else 0,
axis = 1
)
return employees[['employee_id', 'bonus']].sort_values(by='employee_id')