如何在 Python 中使用已有的列来创建一个新的 DataFrame 列?
在数据分析或机器学习过程中,有时需要根据已有的某些列创建一个新的列,以便更好地分析数据。在 Python 的 pandas 库中,我们可以通过简单的操作来实现这个目的。
更多Python教程,请阅读:Python 教程
新建一个 DataFrame
为了方便举例,我们首先新建一个包含学生数学和英语成绩的 DataFrame:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'math': [90, 80, 70, 85],
'english': [70, 75, 80, 90]
})
print(df)
输出:
name math english
0 Alice 90 70
1 Bob 80 75
2 Charlie 70 80
3 David 85 90
直接计算新列
最简单的方法是直接计算新的列,例如我们想计算学生数学和英语成绩的平均分,可以这样:
df['average'] = (df['math'] + df['english']) / 2
print(df)
输出:
name math english average
0 Alice 90 70 80.0
1 Bob 80 75 77.5
2 Charlie 70 80 75.0
3 David 85 90 87.5
这里通过 df['average']
直接新建了一个名为 ‘average’ 的新列,并将其赋值为两个已有列的平均值。
使用 apply 方法
如果你需要使用更复杂的函数,可以使用 apply 方法。例如你想计算数学成绩的等级(优、良、中、及格、不及格):
def get_grade(score):
if score >= 90:
return '优'
elif score >= 80:
return '良'
elif score >= 70:
return '中'
elif score >= 60:
return '及格'
else:
return '不及格'
df['math_grade'] = df['math'].apply(get_grade)
print(df)
输出:
name math english average math_grade
0 Alice 90 70 80.0 优
1 Bob 80 75 77.5 良
2 Charlie 70 80 75.0 中
3 David 85 90 87.5 良
这里新建了一个名为 ‘math_grade’ 的新列,并使用了 apply 方法将 get_grade 函数应用到了数学成绩这一列中。
使用 assign 方法
assign 方法也可以用于新建新的 DataFrame 列。与之前的方法不同的是,assign 方法会返回一个新的 DataFrame,而不是直接在原 DataFrame 上修改:
df_with_grade = df.assign(
english_grade=lambda x: x['english'].apply(get_grade)
)
print(df_with_grade)
输出:
name math english average math_grade english_grade
0 Alice 90 70 80.0 优 及格
1 Bob 80 75 77.5 良 中
2 Charlie 70 80 75.0 中 良
3 David 85 90 87.5 良 优
这里会返回一个新的 DataFrame 副本,其中有一个新的名为 ‘english_grade’ 的列,其值为 apply 方法应用到 ‘english’ 列的 get_grade 函数的返回值。
使用 numpy 和 pandas 函数
对于一些较为复杂的逻辑,也可以使用 numpy 或 pandas 库中提供的函数。例如,我们可以使用 numpy 的 where 函数,在数学成绩高于平均分的情况下,在新列中标记为 True,否则标记为 False:
import numpy as np
average_score = np.mean(df[['math', 'english']], axis=1)
df['above_average'] = np.where(df['math'] > average_score, True, False)
print(df)
输出:
name math english average math_grade above_average
0 Alice 90 70 80.0 优 True
1 Bob 80 75 77.5 良 False
2 Charlie 70 80 75.0 中 False
3 David 85 90 87.5 良 True
这里使用了 numpy 的 mean 函数计算平均值,然后使用 where 函数对计算出的布尔值进行判断,并在新列 ‘above_average’ 中进行标记。
结论
在 Python 的 pandas 库中,创建新的 DataFrame 列非常方便。我们可以直接计算或使用 apply、assign 等方法来实现。如果需要更加复杂的逻辑,也可以使用 numpy 或 pandas 中提供的函数来达到目的。掌握这些技能可以让我们更轻松地进行数据分析和机器学习。