将函数应用于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中的其他列值创建新列[重复]

应用具有多个参数的函数来创建一个新的 pandas 列

在 Pandas 的特定位置创建新列 [重复]

将模型分数应用于 Spark DataFrame - Python

根据多个条件将新列添加到 Python Pandas DataFrame [重复]