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

基于Pandas实现列表末尾元素条件追加(支持正则匹配)

解决Pandas中按条件追加列表元素的问题

我来帮你搞定这个问题!你之前的代码没成功主要是因为用了dfo["list1"].apply(),这里的lambda参数x只是list1列的单个列表值,根本没法访问同一行的list2数据。咱们换个思路,直接对整行进行处理就行:

原代码的问题分析

当你调用dfo["list1"].apply(lambda x: ...)时,x对应的是list1里的每一个列表(比如第一个x是["test1", "test2"]),所以x["list2"]会直接抛出KeyError——列表可没有"list2"这个键哦!

正确的实现方法

我们需要用df.apply(axis=1)来处理每一行数据,这样就能同时拿到同一行的list1和list2值。核心逻辑是:

  • 取出list2的最后一个元素
  • 不区分大小写检查是否等于"test3"
  • 满足条件就复制list1并追加该元素(一定要复制,避免修改原数据),否则返回原list1的副本

方法1:用自定义函数实现(可读性更高)

import pandas as pd

# 初始化你的DataFrame
dfo = pd.DataFrame({
    "list1": [["test1", "test2"], ["test1", "test2", "test3"], ["test1", "test2"]],
    "list2": [["notatest", "test3"], ["notatest"], ["notatest", "Test3"]],
    "desired": [["test1", "test2", "test3"], ["test1", "test2", "test3"], ["test1", "test2", "Test3"]]
})

def append_matching_test3(row):
    last_item = row["list2"][-1]
    if last_item.lower() == "test3":
        # 复制list1避免修改原始数据
        updated_list = row["list1"].copy()
        updated_list.append(last_item)
        return updated_list
    else:
        return row["list1"].copy()

# 应用函数到每一行
dfo["list1_test3_added"] = dfo.apply(append_matching_test3, axis=1)

# 查看结果
print(dfo)

方法2:用lambda简化写法(更简洁)

如果你喜欢一行代码搞定,也可以写成lambda形式:

dfo["list1_test3_added"] = dfo.apply(
    lambda row: row["list1"].copy() + [row["list2"][-1]] 
    if row["list2"][-1].lower() == "test3" 
    else row["list1"].copy(),
    axis=1
)

验证结果

运行后你会发现list1_test3_added列和desired列完全一致,完美符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:37:29