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

如何使用Pandas DataFrame的值按A列截取B列字符串生成C列

问题说明

现有结构如下的Pandas DataFrame:

  • A列:存储整数类型数据,示例值为[1, 5, 3]
  • B列:存储字符串类型数据,示例值为["abcdef", "ghijklmno", "qwertyuiop"]

需求为逐行根据A列的整数值,截取同一行B列字符串的前N个字符,生成新列C。以上述示例数据为例,预期C列的输出结果为["a", "ghijk", "qwe"]。

尝试使用如下代码实现时运行失败:

data_frame['C'] = data_frame.B.str[:data_frame["A"]]
错误原因

Pandas的.str字符串向量化切片接口,不支持直接传入整列Series作为逐行动态的切片长度参数,传入Series时无法按行匹配对应切片位置,因此无法得到预期结果。

可行实现方案

方案1:逐行apply实现(逻辑直观,适合小数据量场景)

通过apply指定按行遍历,逐行读取A列值作为切片长度截取B列字符串即可:

# 示例数据构造(可根据实际表名替换变量名)
import pandas as pd
df = pd.DataFrame({
    "A": [1, 5, 3],
    "B": ["abcdef", "ghijklmno", "qwertyuiop"]
})

# 生成C列
df['C'] = df.apply(lambda row: row['B'][:row['A']], axis=1)

方案2:列表推导式实现(执行效率更高,适合大数据量场景)

通过zip将两列对应位置的值打包后逐一切片,性能明显优于apply方法:

df['C'] = [b_str[:a_num] for a_num, b_str in zip(df['A'], df['B'])]

两种方案运行后得到的C列结果均和预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:12:23