You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于DataFrame现有列与列表创建新列的实现问题

解决DataFrame根据赛道名称生成对应国家列的问题

问题说明

现有包含多列的DataFrame,其中TName列存储赛道名称,需要新增Country列来存储每条赛道对应的国家。原代码最后两行逻辑有误,无法实现需求。

原代码:

austracks = ['Ascot', 'Balnarring']
nztracks = ['Te Aura']
hktracks = ['Sha Tin']
singtracks = ['Singapore']

df['Country'] = df['TName'] 
(["AUS" for c in austracks] + ["NZ" for c in nztracks] + ["HK" for c in nztracks] + ["SING" for c in nztracks])

期望结果:

TNameCountry
AscotAUS
BalnarringAUS
Te AuraNZ

解决方案

方法1:使用映射字典(推荐,易维护)

先建立赛道名称到国家的映射关系,再通过map方法生成新列:

# 方式1:直接定义映射字典
track_country_map = {
    'Ascot': 'AUS',
    'Balnarring': 'AUS',
    'Te Aura': 'NZ',
    'Sha Tin': 'HK',
    'Singapore': 'SING'
}

# 方式2:从已有赛道列表动态生成映射字典
austracks = ['Ascot', 'Balnarring']
nztracks = ['Te Aura']
hktracks = ['Sha Tin']
singtracks = ['Singapore']

track_country_map = {}
track_country_map.update({track: 'AUS' for track in austracks})
track_country_map.update({track: 'NZ' for track in nztracks})
track_country_map.update({track: 'HK' for track in hktracks})
track_country_map.update({track: 'SING' for track in singtracks})

# 生成Country列
df['Country'] = df['TName'].map(track_country_map)

方法2:使用numpy.select(适合多条件判断)

通过条件列表和对应结果列表,批量完成赋值:

import numpy as np

austracks = ['Ascot', 'Balnarring']
nztracks = ['Te Aura']
hktracks = ['Sha Tin']
singtracks = ['Singapore']

# 定义条件和对应结果
conditions = [
    df['TName'].isin(austracks),
    df['TName'].isin(nztracks),
    df['TName'].isin(hktracks),
    df['TName'].isin(singtracks)
]
choices = ['AUS', 'NZ', 'HK', 'SING']

# 生成Country列,未匹配到的内容设为NaN
df['Country'] = np.select(conditions, choices, default=np.nan)

原代码问题解析

原代码最后两行逻辑错误:直接将df['TName']赋值给df['Country']后,多余的列表拼接语句没有和赛道名称建立对应关系,无法实现按赛道匹配国家的需求。

内容的提问来源于stack exchange,提问作者onthepunt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:12:29