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

pandas DataFrame中按另一列指定位置提取字符串列字符的方法

pandas 从字符串列按另一列指定索引提取字符的最优实现

以下为不同场景下的主流实现方案:

方案1:列表推导式(绝大多数场景最优)

代码最简洁,性能远高于行级apply,适合千万行以下的绝大多数数据集:

df["extracted"] = [s[i] for s, i in zip(df["s"], df["i"])]

如果需要处理索引超出字符串长度的边界情况,可扩展为:

df["extracted"] = [s[i] if 0 <= i < len(s) else pd.NA for s, i in zip(df["s"], df["i"])]

方案2:numpy 向量化实现(超大规模数据集最优)

完全向量化操作,在百万行以上的数据集上性能表现最佳:

import numpy as np

# 将字符串列转为字符二维数组
char_arr = np.array(df["s"].apply(list).tolist())
# 按行索引和i列的列索引取值
df["extracted"] = char_arr[np.arange(len(df)), df["i"]]

方案3:apply 实现(小数据集可读性最优)

代码可读性最高,但行级apply性能较差,仅适合万级以下的小数据集使用:

df["extracted"] = df.apply(lambda row: row["s"][row["i"]], axis=1)

你尝试的df["s"].str.get()方法仅支持传入固定整数,不支持传入Series动态取每行的不同索引,因此不适用该场景。

结果验证

运行上述任意方案后,输出的df结果如下:

siextracted
0ACGT0A
1AAGA2G

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:24:05