pandas apply 多列
在使用Pandas进行数据清洗和数据处理时,经常会遇到需要同时对多列进行操作的情况。Pandas中的apply函数不仅可以对单列进行操作,还可以对多列进行操作。本文将详细介绍如何使用Pandas的apply函数对多列进行操作。
1. apply函数简介
Pandas中的apply函数是一种灵活的数据处理方法,可以对DataFrame的一列或多列进行操作。apply函数的基本用法如下:
df['new_column'] = df['old_column'].apply(func)
其中,func是对每个元素执行的函数,可以是内置的函数、自定义函数或Lambda函数。apply函数会对每个元素应用func函数,并将结果保存在新的列中。如果需要对多列进行操作,可以使用apply函数的axis参数指定轴向。
2. apply函数同时对多列进行操作
下面以一个示例来说明如何使用apply函数同时对多列进行操作。假设有一个包含学生数学和英语成绩的DataFrame:
import pandas as pd
data = {
'student_id': [1, 2, 3, 4, 5],
'math_score': [80, 90, 85, 70, 95],
'english_score': [75, 85, 80, 65, 90]
}
df = pd.DataFrame(data)
print(df)
运行上述代码,可以得到包含学生数学和英语成绩的DataFrame:
student_id math_score english_score
0 1 80 75
1 2 90 85
2 3 85 80
3 4 70 65
4 5 95 90
现在我们想要计算每个学生的数学和英语成绩的平均值,并将结果保存在新的列中。可以使用apply函数同时对多列进行操作:
df['average_score'] = df[['math_score', 'english_score']].apply(lambda row: row.mean(), axis=1)
print(df)
运行上述代码,可以得到包含学生数学和英语成绩平均值的DataFrame:
student_id math_score english_score average_score
0 1 80 75 77.5
1 2 90 85 87.5
2 3 85 80 82.5
3 4 70 65 67.5
4 5 95 90 92.5
在上面的示例中,我们使用了Lambda函数对数学和英语成绩的列进行操作,计算每个学生的平均成绩,并将结果保存在新的列中。
3. apply函数同时对多列进行复杂操作
除了简单的计算平均值外,apply函数也可以进行更复杂的操作。在下面的示例中,我们将实现一个函数,根据学生的数学和英语成绩给出评级,将结果保存在新的列中:
def get_grade(row):
avg_score = row.mean()
if avg_score >= 90:
return 'A'
elif avg_score >= 80:
return 'B'
elif avg_score >= 70:
return 'C'
else:
return 'D'
df['grade'] = df[['math_score', 'english_score']].apply(get_grade, axis=1)
print(df)
运行上面的代码,可以得到包含学生数学和英语成绩评级的DataFrame:
student_id math_score english_score average_score grade
0 1 80 75 77.5 C
1 2 90 85 87.5 B
2 3 85 80 82.5 B
3 4 70 65 67.5 D
4 5 95 90 92.5 A
在上述示例中,我们定义了一个自定义函数get_grade,根据学生的平均成绩给出评级,然后将评级保存在新的列中。
4. 总结
本文介绍了如何使用Pandas的apply函数同时对多列进行操作。通过示例代码演示了计算多列的平均值和根据多列值得出评级的操作。在实际数据处理中,可以根据具体需求编写更复杂的处理函数,灵活地对多列数据进行操作。