Python 根据给定的条件创建Pandas数据框架列
在对数据进行操作时,可能会有这样的情况:我们想根据一些条件来添加一列。没有任何库函数可以直接实现这个任务,所以我们要看看有哪些方法可以实现这个目标。在这篇文章中,我们将看到如何在Python中基于一个给定的条件创建一个Pandas数据框架列。
根据一个条件创建Pandas数据框架列
问题:给定一个包含文化活动数据的数据框架,添加一个名为 “价格 “的列,该列包含基于某一天将进行的活动类型的某一天的门票价格。
创建一个数据框架
在这里,我们正在创建数据框架来解决给定的问题。
# importing pandas as pd
import pandas as pd
# Creating the dataframe
df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011',
'11/11/2011', '11/12/2011'],
'Event' : ['Music', 'Poetry', 'Music', 'Comedy', 'Poetry']})
# Print the dataframe
print(df)
输出:
使用列表理解法
我们可以使用Python的列表理解技术来实现这一任务。列表理解大多比其他方法快。
现在,我们将在数据框架中添加一个名为 “价格 “的新列。为了这个目的,我们将使用列表理解技术。如果’事件’是’音乐’,则将价格设置为1500,否则为800。
# Add a new column named 'Price'
df['Price'] = [1500 if x =='Music' else 800 for x in df['Event']]
# Print the DataFrame
print(df)
输出 :
正如我们在输出中看到的,我们已经成功地根据一些条件向数据框架添加了一个新列。
使用DataFrame.apply()函数
我们可以使用DataFrame.apply()函数来实现这个目标。在有些情况下,我们可能有两个以上的值,在这种情况下,我们可以使用一个字典将新的值映射到键上。当我们有更多的类别时,这确实提供了很大的灵活性,我们想为新添加的列分配不同的值。
现在我们将在数据框架中添加一个名为 “价格 “的新列。为此,我们将使用DataFrame.apply()函数来实现这一目标。如果 “事件 “是 “音乐”,则将价格设为1500,如果 “事件 “是 “喜剧”,则设为1200,如果 “事件 “是 “诗歌”,则设为800。
# Define a function to map the values
def set_value(row_number, assigned_value):
return assigned_value[row_number]
# Create the dictionary
event_dictionary ={'Music' : 1500, 'Poetry' : 800, 'Comedy' : 1200}
# Add a new column named 'Price'
df['Price'] = df['Event'].apply(set_value, args =(event_dictionary, ))
# Print the DataFrame
print(df)
输出 :
正如我们在输出中看到的,我们已经成功地根据一些条件向数据框架添加了一个新列。
使用DataFrame.map()函数
我们可以使用DataFrame.map()函数来实现这个目标。这是一个非常直接的方法,我们使用一个字典来简单地根据键值映射到新添加的列。
现在我们将在数据框架中添加一个名为 “价格 “的新列。为此,我们将使用DataFrame.map()函数来实现这一目标。如果 “事件 “是 “音乐”,则将价格设置为1500,如果 “事件 “是 “喜剧”,则为1200,如果 “事件 “是 “诗歌”,则为800。
# Create the dictionary
event_dictionary ={'Music' : 1500, 'Poetry' : 800, 'Comedy' : 1200}
# Add a new column named 'Price'
df['Price'] = df['Event'].map(event_dictionary)
# Print the DataFrame
print(df)
输出 :
使用numpy.where()函数
我们可以使用numpy.where()函数来实现这个目标。这是一个非常直接的方法,我们使用where条件,根据条件简单地将数值映射到新添加的列。
现在,我们将在数据框架中添加一个名为 “价格 “的新列。如果’事件’是’音乐’,则将价格设为1500,其余的事件设为800。
# np.where(condition, value if condition
# is true, value if condition is false)
df['Price'] = np.where(df['Event']
=='Music', 1500,800 )
print(df)
输出: