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

如何为Pandas DataFrame添加列,填充对应球队列表的最后元素?

问题描述

我有如下Pandas DataFrame:

0    1   2   3
Teams               
Lakers     0   15  10  53
Warriors  92  100  36  45
Celtics   32   66  67  57
Rockets   96   18  15  98
Bucks     66   85   2  69
Nets      16   84  61  83
Clippers  59    8   1  54
Jazz      56   52  33  86
Heat      78   90  88  81
Suns      45   16  29   3
Bulls     52   57  77  18

可通过以下代码重建:

import pandas as pd

data = {'Teams': {0: 'Lakers',
  1: 'Warriors',
  2: 'Celtics',
  3: 'Rockets',
  4: 'Bucks',
  5: 'Nets',
  6: 'Clippers',
  7: '76ers',
  8: 'Jazz',
  9: 'Heat',
  10: 'Suns',
  11: 'Bulls'},
 0: {0: 0, 1: 92, 2: 32, 3: 96, 4: 66, 5: 16, 6: 59, 7: 93, 8: 56, 9: 78, 10: 45, 11: 52},
 1: {0: 15, 1: 100, 2: 66, 3: 18, 4: 85, 5: 84, 6: 8, 7: 99, 8: 52, 9: 90, 10: 16, 11: 57},
 2: {0: 10, 1: 36, 2: 67, 3: 15, 4: 2, 5: 61, 6: 1, 7: 54, 8: 33, 9: 88, 10: 29, 11: 77},
 3: {0: 53, 1: 45, 2: 57, 3: 98, 4: 69, 5: 83, 6: 54, 7: 51, 8: 86, 9: 81, 10: 3, 11: 18}}

df = pd.DataFrame.from_dict(data)

同时每个球队对应一个字母列表:

Lakers = ['U', 'G', 'O', 'Q', 'A']
Warriors = ['X', 'P', 'E', 'S', 'O']
Celtics = ['U', 'T', 'F', 'H', 'Q']
Rockets = ['V', 'C', 'Z', 'T', 'G']
Bucks = ['M', 'P', 'V', 'C', 'O']
Nets = ['V', 'K', 'Q', 'D', 'M']
Clippers = ['U', 'B', 'C', 'Z', 'R']
Jazz = ['I', 'S', 'C', 'L', 'T']
Heat = ['M', 'A', 'A', 'Q', 'F']
Suns = ['Z', 'S', 'F', 'L', 'O']
Bulls = ['W', 'C', 'T', 'P', 'E']

我想创建列4,将对应球队列表的最后一个元素填入(比如Lakers对应'A',Bucks对应'O')。尝试了以下代码但所有字段都被填充为同一个字母:

n = 0
for _ in range(len(df)):
    for t in team_list:
        if t == df.iloc[n, 0]:
            df['4'] = t[-1]
            n += 1
错误原因

你的代码中df['4'] = t[-1]会直接将整个列替换为当前的t[-1]值,循环到最后一次时,所有行都会被覆盖成最后一个匹配到的字母。

正确解法

方法1:字典映射(最推荐)

先构建球队与对应列表最后一个字母的映射字典,再用map生成新列:

# 构建球队到最后一个字母的映射字典
team_last_letter = {
    'Lakers': Lakers[-1],
    'Warriors': Warriors[-1],
    'Celtics': Celtics[-1],
    'Rockets': Rockets[-1],
    'Bucks': Bucks[-1],
    'Nets': Nets[-1],
    'Clippers': Clippers[-1],
    'Jazz': Jazz[-1],
    'Heat': Heat[-1],
    'Suns': Suns[-1],
    'Bulls': Bulls[-1],
    '76ers': ''  # 原DataFrame包含76ers,可按需补全对应值
}

# 生成新列
df['4'] = df['Teams'].map(team_last_letter)

方法2:修复循环代码

若坚持使用循环,需给对应行赋值而非整个列:

# 初始化新列为空
df['4'] = ''
# 构建球队到对应列表的字典
team_dict = {
    'Lakers': Lakers,
    'Warriors': Warriors,
    'Celtics': Celtics,
    'Rockets': Rockets,
    'Bucks': Bucks,
    'Nets': Nets,
    'Clippers': Clippers,
    'Jazz': Jazz,
    'Heat': Heat,
    'Suns': Suns,
    'Bulls': Bulls,
    '76ers': []
}

for index, row in df.iterrows():
    team_name = row['Teams']
    if team_name in team_dict and team_dict[team_name]:
        df.loc[index, '4'] = team_dict[team_name][-1]

方法3:apply函数

利用apply结合lambda函数实现:

# 构建球队到对应列表的字典
team_dict = {
    'Lakers': Lakers,
    'Warriors': Warriors,
    'Celtics': Celtics,
    'Rockets': Rockets,
    'Bucks': Bucks,
    'Nets': Nets,
    'Clippers': Clippers,
    'Jazz': Jazz,
    'Heat': Heat,
    'Suns': Suns,
    'Bulls': Bulls,
    '76ers': []
}

df['4'] = df['Teams'].apply(lambda x: team_dict[x][-1] if (x in team_dict and team_dict[x]) else '')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:50:39