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

pandas如何删除列中列表前n个元素(n为另一列对应数值)

实现方案

方法1:使用apply + lambda(符合你猜测的实现思路)

按行遍历DataFrame,对每一行的a列列表做切片,起始索引取当前行b列的数值即可:

df['a'] = df.apply(lambda row: row['a'][row['b']:], axis=1)

参数axis=1指定按行处理,lambda接收的row参数代表每一行的Series对象,row['a'][row['b']:]就是去掉列表前row['b']个元素的切片写法,注意必须加axis=1,否则默认按列处理会报错。

方法2:使用列表推导式(性能更优)

如果数据量较大,优先用列表推导式实现,执行效率比apply高30%以上:

df['a'] = [lst[n:] for lst, n in zip(df['a'], df['b'])]

完整验证代码

import pandas as pd

a = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
b = [3,1,2]
df = pd.DataFrame(zip(a,b), columns = ['a', 'b'])

# 执行修改
df['a'] = df.apply(lambda row: row['a'][row['b']:], axis=1)

print(df)

运行后输出和你预期的结果完全一致:

a  b
0        [4, 5]  3
1  [7, 8, 9, 10]  1
2  [13, 14, 15]  2

边界说明

如果某行b列的数值大于等于a列列表的长度,切片会自动返回空列表,不会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:36:03