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

如何在Pandas DataFrame中添加序列列表并生成计算列

解决方案:在Pandas DataFrame中添加列表列并处理列表元素

完全可以在Pandas DataFrame中存储列表类型的列,以下是针对你需求的分步实现:

1. 初始化DataFrame

先确认初始数据:

import pandas as pd

df = pd.DataFrame(
    {"Foo": ["ba1", "ba2", "ba3"],
     "Foo2": ["ba4", "ba5", "ba6"],
     "num": [1,2,3]}
)

2. 添加序列列表列x

你之前使用groupby的方式完全没必要,且lambda函数错误引用了整个df["num"]列,导致生成重复结果。正确做法是对num列的单个元素逐一处理:

# 生成x列:每个元素是从1到对应num值的列表
df['x'] = df['num'].apply(lambda n: list(range(1, n+1)))

如果你需要将num列替换为包含所有数值的统一列表(如你期望的[[1,2,3]]),可额外执行:

# 可选:将num列修改为每行相同的全局数值列表
df['num'] = [df['num'].tolist()] * len(df)

执行后得到你期望的第一步结果:

Foo Foo2          num          x
0  ba1  ba4  [1, 2, 3]     [1]
1  ba2  ba5  [1, 2, 3]  [1, 2]
2  ba3  ba6  [1, 2, 3]  [1, 2, 3]

3. 生成处理后的列表列y

对x列的每个列表元素应用x+1函数,同样用apply逐个处理列表:

# 对x中每个元素执行x+1,生成y列
df['y'] = df['x'].apply(lambda lst: [num + 1 for num in lst])

最终得到你期望的第二步结果:

Foo Foo2          num          x          y
0  ba1  ba4  [1, 2, 3]     [1]     [2]
1  ba2  ba5  [1, 2, 3]  [1, 2]  [2, 3]
2  ba3  ba6  [1, 2, 3]  [1, 2, 3]  [2, 3, 4]

关键注意事项

  • 不要在apply的lambda中引用整个DataFrame列(如df["num"]),需针对每行的单个元素处理。
  • Pandas支持存储列表作为列值,但这类列无法使用矢量化运算,仅适合数据量不大的场景,大量数据建议拆分列表为多行再处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:30:51