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

如何不使用循环为Pandas DataFrame高效生成columnB列?

高效实现Pandas新列生成需求

可以用Pandas的矢量化字符串操作结合numpy.where来实现,完全不需要循环,效率拉满:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'columnA': ['DD22HAHTL1NXX---', 'DD22HATNT1N--D3F', 'DD22HATNT1N--B3F', 'DD22HAHTL1N--A3F', 'DD22HATNT1N--C1F', 'DD22HAHTL1N--A3F', 'DD22HATNT1N--B3F', 'DD22HAHTL1N--A3F', 'DD22HAHTL1N--A3E', 'DD22HAHTL1N--A3F', 'DD22HAHTL1N--B3F', 'DD22HAHTL1N--A3F', 'DD22HAHTL1N--A3F', 'DD22HAHTL1NZZ---', 'DD22HAHTL1N--A3E']})

# 生成条件:判断columnA最后3个字符是否为---
condition = df['columnA'].str.endswith('---')

# 用numpy.where实现分支赋值
df['columnB'] = np.where(
    condition,
    df['columnA'].str[11:13],  # 满足条件时取第12、13位(Python索引从0开始,对应11到13的切片)
    df['columnA'].str[-3:]     # 不满足时取最后3个字符
)

print(df)

代码说明

  • df['columnA'].str.endswith('---'):矢量化判断每行字符串是否以---结尾,返回布尔值序列
  • df['columnA'].str[11:13]:利用Pandas字符串切片,直接提取每行第12、13位字符(索引从0开始,切片左闭右开)
  • df['columnA'].str[-3:]:提取每行最后3个字符
  • np.where:根据布尔条件选择对应值,全程矢量化操作,比循环效率高很多

运行后columnB的结果如下:

columnA columnB
0   DD22HAHTL1NXX---      XX
1   DD22HATNT1N--D3F     D3F
2   DD22HATNT1N--B3F     B3F
3   DD22HAHTL1N--A3F     A3F
4   DD22HATNT1N--C1F     C1F
5   DD22HAHTL1N--A3F     A3F
6   DD22HATNT1N--B3F     B3F
7   DD22HAHTL1N--A3F     A3F
8   DD22HAHTL1N--A3E     A3E
9   DD22HAHTL1N--A3F     A3F
10  DD22HAHTL1N--B3F     B3F
11  DD22HAHTL1N--A3F     A3F
12  DD22HAHTL1N--A3F     A3F
13  DD22HAHTL1NZZ---      ZZ
14  DD22HAHTL1N--A3E     A3E

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:24:11