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

Pandas如何对DataFrame的列表类型列使用searchsorted方法

问题原因与正确实现

报错根因

  • np.searchsorted的第一个参数要求是一维有序类数组结构。你直接传入存储Python列表的Series时,numpy会将其识别为object类型的一维数组,每个元素本身是一个list,运算时会直接拿整数5和list做大小比较,因此触发类型错误。
  • 单独传入test['timestamp'][0]能正常运行,是因为此时传入的是单个一维整数列表,完全符合searchsorted的参数输入要求。

可用实现方案

方案1:逐行调用(逻辑简单,适配所有场景)

使用Series.apply逐行对每个有序列表执行searchsorted,代码直观不容易出错,适合绝大多数数据规模:

import numpy as np
import pandas as pd

# 构造示例数据
test = pd.DataFrame({
    'timestamp': [
        [1, 2, 3, 4],
        [1, 3, 5, 7],
        [2, 4, 6, 8],
        [1, 5, 5, 5],
        [3, 4, 5, 6]
    ]
})

# 生成结果列
test['res'] = test['timestamp'].apply(lambda lst: np.searchsorted(lst, 5))

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

>>> test
        timestamp  res
0  [1, 2, 3, 4]    3
1  [1, 3, 5, 7]    1
2  [2, 4, 6, 8]    2
3  [1, 5, 5, 5]    0
4  [3, 4, 5, 6]    1

方案2:批量运算(适合大数据量,性能更优)

如果DataFrame行数很高,逐行apply循环效率偏低,且所有行的列表长度一致,可以先将列表列转换为二维numpy数组,再批量执行搜索:

# 转换为二维numpy数组
arr = np.array(test['timestamp'].tolist())
# 按行执行searchsorted
test['res'] = np.apply_along_axis(lambda row: np.searchsorted(row, 5), axis=1, arr=arr)

提示:如果各行列表长度不统一,无法使用批量方案,只能选择逐行调用的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:15:42