如何在 Python 中使用已有的列来创建一个新的 DataFrame 列?

如何在 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 中提供的函数来达到目的。掌握这些技能可以让我们更轻松地进行数据分析和机器学习。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程