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

如何基于子串及后续文本在Pandas DataFrame中创建新列?

解决方案

步骤1:构造示例DataFrame

import pandas as pd

data = {
    'A': ['Jan05 GN=XYZ NA', 'Dec25 GN=ZYX Y', 'Nov12 GN=NHAN Y', 'May22 GN=GZV X', 'Jun24 MNIAV X', 'May22 CAUCGZV Y'],
    'B': ['Q9GLD3;A0A0A0RBT6', 'A0A8I3PIE0;A0A8I3PEP4;A0A0B4J198', 'P60524;A0A1K0GGH0;A0A8I3P9B9', 'P09582;A0A1R3UGQ4;A0A8I3NWV7', 'P09582;A0A1R3UGQ4;A0A8I3NWV7', 'P09582;A0A1R3UGQ4;A0A8I3NWV7']
}
df = pd.DataFrame(data)

步骤2:创建新列C

用numpy.where结合字符串处理实现,这种方法比apply更高效,适合大数据集:

import numpy as np

# 提取A列中GN=后的非空白内容
gn_extract = df['A'].str.extract(r'GN=(\S+)', expand=False)
# 提取B列第一个分号前的内容
b_extract = df['B'].str.split(';').str[0]
# 按条件赋值生成新列C
df['C'] = np.where(df['A'].str.contains('GN='), gn_extract, b_extract)

验证结果

运行后查看DataFrame:

print(df)

输出结果与需求一致:

ABC
Jan05 GN=XYZ NAQ9GLD3;A0A0A0RBT6XYZ
Dec25 GN=ZYX YA0A8I3PIE0;A0A8I3PEP4;A0A0B4J198ZYX
Nov12 GN=NHAN YP60524;A0A1K0GGH0;A0A8I3P9B9NHAN
May22 GN=GZV XP09582;A0A1R3UGQ4;A0A8I3NWV7GZV
Jun24 MNIAV XP09582;A0A1R3UGQ4;A0A8I3NWV7P09582
May22 CAUCGZV YP09582;A0A1R3UGQ4;A0A8I3NWV7P09582

代码解释

  • df['A'].str.extract(r'GN=(\S+)', expand=False):通过正则表达式匹配GN=后的所有非空白字符,精准提取目标字符串。
  • df['B'].str.split(';').str[0]:将B列内容按分号分割,取分割后的第一个元素,即分号前的内容。
  • np.where(condition, x, y):当条件(A列含"GN=")成立时取gn_extract的值,否则取b_extract的值,直接实现需求中的逻辑判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:18:15