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

如何在Pandas中按条件向嵌套列表列追加元素?

Pandas按条件修改嵌套列表列的正确方法

问题原因分析

  • 所有行列表同步修改:用[[[1],[1],[1]]] * df.shape[0]生成B列时,Python会将同一个嵌套列表对象重复引用到每一行。由于列表是可变类型,修改任意一行的列表会导致所有行的列表同步变化——它们本质上指向同一个内存地址。
  • 目标行变为None:list.append()是原地修改列表的方法,它的返回值是None。你用apply(lambda x: x[0].append(2))时,返回的就是None,因此mask替换后符合条件的行值变成了None。

解决方案

第一步:正确初始化独立的嵌套列表列

避免用乘法生成列表,改用列表推导式创建每行独立的嵌套列表:

import pandas as pd
df = pd.DataFrame(data={'A': [1, 2, 3]})
# 列表推导式生成每行独立的嵌套列表
df['B'] = [[[1], [1], [1]] for _ in range(df.shape[0])]

第二步:按条件修改目标行

方法一:用loc定位修改

# 定位A=2的行,生成新的嵌套列表替换原列表
mask = df['A'] == 2
df.loc[mask, 'B'] = df.loc[mask, 'B'].apply(lambda x: [x[0] + [2], x[1], x[2]])

方法二:用apply遍历处理每行

df['B'] = df.apply(
    lambda row: [row['B'][0] + [2], row['B'][1], row['B'][2]] 
    if row['A'] == 2 
    else row['B'],
    axis=1
)

最终结果

执行上述代码后,输出符合预期:

print(df)
#    A                   B
# 0  1     [[1], [1], [1]]
# 1  2  [[1, 2], [1], [1]]
# 2  3     [[1], [1], [1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:23:14