在Pandas DataFrame中基于现有的列创建一个新的列

在Pandas DataFrame中基于现有的列创建一个新的列

在Pandas中处理数据时,我们会对数据进行大量的操作,以获得所需形式的数据。其中一个操作可能是,我们想根据对DataFrame中现有列的一些操作结果,在DataFrame中创建新的列。让我们来讨论一下我们可以做到这一点的几种方法。

给定一个包含事件数据的数据框架,我们想创建一个名为‘Discounted_Price’的新列,它是在门票价格上应用10%的折扣后计算出来的。

示例1:我们可以使用DataFrame.apply()函数来实现这一任务。

# importing pandas as pd
import pandas as pd
 
# Creating the DataFrame
df = pd.DataFrame({'Date':['10/2/2011', '11/2/2011', '12/2/2011', '13/2/2011'],
                    'Event':['Music', 'Poetry', 'Theatre', 'Comedy'],
                    'Cost':[10000, 5000, 15000, 2000]})
 
# Print the dataframe
print(df)

输出 :


在Pandas DataFrame中基于现有的列创建一个新的列

Sample dataframe

现在我们将在现有的 “成本 “列上应用10%的折扣后,创建一个名为 “Discounted_Price “的新列。

# using apply function to create a new column
df['Discounted_Price'] = df.apply(lambda row: row.Cost -
                                  (row.Cost * 0.1), axis = 1)
 
# Print the DataFrame after addition
# of new column
print(df)

输出 :


在Pandas DataFrame中基于现有的列创建一个新的列

创建有新列的数据框架

实例2:我们可以通过直接对所需的列元素进行所需的操作来达到同样的效果。

import pandas as pd
 
# Creating the DataFrame
df = pd.DataFrame({'Date':['10/2/2011', '11/2/2011', '12/2/2011', '13/2/2011'],
                    'Event':['Music', 'Poetry', 'Theatre', 'Comedy'],
                    'Cost':[10000, 5000, 15000, 2000]})
 
# Create a new column 'Discounted_Price' after applying
# 10% discount on the existing 'Cost' column.
 
# create a new column
df['Discounted_Price'] = df['Cost'] - (0.1 * df['Cost'])
 
# Print the DataFrame after
# addition of new column
print(df)

输出 :

在Pandas DataFrame中基于现有的列创建一个新的列

输出 DataFrame

示例3:使用DataFrame.map()函数从现有列中使用映射函数创建新列

我们将用一些样本数据创建一个数据框架。

data = {
    "name": ["John", "Ted", "Dev", "Brad", "Rex", "Smith", "Samuel", "David"],
    "salary": [10000, 20000, 50000, 45500, 19800, 95000, 5000, 50000]
}
# create dataframe from data dictionary
df = pd.DataFrame(data)
# print the dataframe
display(df.head())

输出:

在Pandas DataFrame中基于现有的列创建一个新的列

Sample dataframe

现在,我们将创建一个映射函数(salary_stats),并使用DataFrame.map()函数从现有列中创建一个新列

def salary_stats(value):
    if value < 10000:
        return "very low"
    if 10000 <= value < 25000:
        return "low"
    elif 25000 <= value < 40000:
        return "average"
    elif 40000 <= value < 50000:
        return "better"
    elif value >= 50000:
        return "very good"
 
df['salary_stats'] = df['salary'].map(salary_stats)
display(df.head())

输出:

在Pandas DataFrame中基于现有的列创建一个新的列

输出带有新列的数据框架

解释:这里我们使用了pandas DataFrame.map()函数,根据我们定义的映射逻辑,将每个值映射为一个字符串。由此产生的一系列数值被分配到一个新的列,”salary_stats”。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程