将函数应用于DataFrame并创建新列[重复]
Posted
技术标签:
【中文标题】将函数应用于DataFrame并创建新列[重复]【英文标题】:Apply function to DataFrame and create new column [duplicate] 【发布时间】:2020-11-15 15:17:17 【问题描述】:我有这个数据框:
df = pd.DataFrame('Player': ['Pele', 'Platini', 'Beckenbauer'],
'Position': ['Forward', 'Midfielder', 'Defender'])
我有这个功能需要应用到数据框,创建一个新列“颜色”。
def color(position):
if position == 'Forward':
color = 'black'
elif position == 'Midfielder':
color = 'white'
elif position == 'Defender':
color = 'red'
return color
我试过了:
df['Color'] = df.apply(color, axis=1)
但我得到了错误:
ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')
我该怎么做?
【问题讨论】:
您正在传递所有列值。所以你需要指定你所指的列值。 看看这个:***.com/questions/51388201/… 【参考方案1】:应该是:
df['color'] = df['Position'].apply(color)
或者
def color(position):
pos = position['Position']
if pos == 'Forward':
color = 'black'
elif pos == 'Midfielder':
color = 'white'
elif pos == 'Defender':
color = 'red'
return color
df['color'] = df.apply(color, axis=1)
Player Position color
0 Pele Forward black
1 Platini Midfielder white
2 Beckenbauer Defender red
【讨论】:
【参考方案2】:您可以在此处使用pd.Series.map
。创建映射字典并将其提供给pd.Series.map
mapping = 'Forward':'black', 'Midfielder':'white', 'Defender':'red'
df['Color'] = df['Position'].map(mapping)
Player Position Color
0 Pele Forward black
1 Platini Midfielder white
2 Beckenbauer Defender red
【讨论】:
我喜欢这个。更少的代码。 @8-BitBorges.map
可以方便地解决映射问题;)很高兴这对您有所帮助以上是关于将函数应用于DataFrame并创建新列[重复]的主要内容,如果未能解决你的问题,请参考以下文章
循环以基于Python Dataframe中的其他列值创建新列[重复]