【问题标题】:Apply function to DataFrame and create new column [duplicate]将函数应用于DataFrame并创建新列[重复]
【发布时间】: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')

我该怎么做?

【问题讨论】:

标签: python pandas


【解决方案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 可以方便地解决映射问题;)很高兴这对您有所帮助
    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 2019-04-03
    • 2021-02-11
    • 2019-01-02
    • 2020-05-06
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多