Python|根据给定条件创建 Pandas 数据框列
在对数据进行操作时,可能会出现我们希望根据某些条件添加列的情况。没有任何库函数可以直接实现这个任务,所以我们将看看我们可以实现这个目标的方法。
问题:给定一个包含文化活动数据的数据框,添加一个名为“价格”的列,其中包含基于特定日期将进行的活动类型的特定日期的票价。
解决方案#1:我们可以使用 Python 的列表理解技术来完成这项任务。列表理解通常比其他方法更快。
# 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', 'Music', 'Poetry']})
# Print the dataframe
print(df)
输出 :
现在我们将在数据框中添加一个名为“价格”的新列。为此,我们将使用列表理解技术。如果“事件”是“音乐”,则将价格设置为 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)
输出 :
正如我们在输出中看到的,我们已经成功地根据某些条件向数据框中添加了一个新列。解决方案#2:我们可以使用DataFrame.apply()
函数来实现目标。在某些情况下,我们有两个以上的值,在这种情况下,我们可以使用字典将新值映射到键上。当我们想要为新添加的列分配不同值的类别数量较多时,这确实提供了很大的灵活性。
# 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)
输出 :
现在我们将在数据框中添加一个名为“价格”的新列。为此,我们将使用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)
输出 :
正如我们在输出中看到的,我们已经成功地根据某些条件向数据框中添加了一个新列。解决方案#3:我们可以使用DataFrame.map()
函数来实现目标。这是一种非常直接的方法,我们使用字典根据键将值简单地映射到新添加的列。
# 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)
输出 :
现在我们将在数据框中添加一个名为“价格”的新列。为此,我们将使用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)
输出 :