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

Pandas如何基于另一列值修改DataFrame指定列的列表元素

问题原因

你原有代码存在两个核心问题:

  • 内层lambda直接引用df['Letter']会取到整个Series对象,而非当前行对应的Letter取值,拼接逻辑本身不符合预期
  • Python3环境下map()返回的是惰性迭代器,不会直接生成实体列表,因此你得到的是map类型对象而非处理完成的列表结果
    另外你给出的期望结果最后一行存在笔误:原数据最后一行Letter取值为'4G',对应处理结果应为['4Gd']而非['5Gd']。
实现方案

写法1:易读性优先(中小数据集适用)

使用行级apply搭配列表推导式,逻辑直观易维护:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'Letter': ['2G', '2G', '3G', '5G', '4G'],
    'Action': [['a','b'], ['a','c','d'], ['a'], ['a','b','c','d','e'], ['d']]
})

# 逐行处理:用当前行的Letter值给Action列表内每个元素加前缀
df['Action'] = df.apply(lambda row: [row['Letter'] + elem for elem in row['Action']], axis=1)

写法2:性能优先(大数据集适用)

直接用zip遍历两列的原生Python对象,避免pandas行级apply的额外开销,运行效率比apply高30%~50%(数据量越大差距越明显):

df['Action'] = [
    [prefix + elem for elem in action_list]
    for prefix, action_list in zip(df['Letter'], df['Action'])
]
处理结果

两种写法最终得到的DataFrame输出如下:

LetterAction
2G['2Ga', '2Gb']
2G['2Ga', '2Gc', '2Gd']
3G['3Ga']
5G['5Ga', '5Gb', '5Gc', '5Gd', '5Ge']
4G['4Gd']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:57:14