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

如何在DataFrame中为以数字开头的指定列字符串前置同行另一列字符串

解决DataFrame中选择性合并列的问题

先看看你的需求场景:

我有如下DataFrame(df):

col_1    col_2    col_3    col_4
sample_001  fjsah    AB    11-110
sample_002  dfshb    CD    20-210
sample_003  fsvhb    EF    N3-303
sample_004  dfbkk    GH    Q4-444
sample_005  gnddl    IJ    55-005

需要实现:仅当col_4中的字符串以数字开头时,将同行col_3中的字符串前置到该col_4字符串前,处理后得到目标DataFrame:

col_1    col_2    col_3    col_4
sample_001  fjsah    AB    AB11-110
sample_002  dfshb    CD    CD20-210
sample_003  fsvhb    EF    N3-303
sample_004  dfbkk    GH    Q4-444
sample_005  gnddl    IJ    IJ55-005

我已经能通过以下代码识别出col_4中以数字开头的字符串:

for n in df['col_4']:
    if n[0].isdigit():
        print(n)

但不清楚如何在循环中实现这种「选择性合并」操作。


方法一:用apply函数(更简洁高效)

在pandas里处理行级逻辑,apply是很方便的选择,不用手动写复杂循环。直接对每行做判断,满足条件就拼接列值,否则保留原值:

import pandas as pd

# 先构造你的DataFrame(如果已经有了可以跳过这部分)
data = {
    'col_1': ['sample_001', 'sample_002', 'sample_003', 'sample_004', 'sample_005'],
    'col_2': ['fjsah', 'dfshb', 'fsvhb', 'dfbkk', 'gnddl'],
    'col_3': ['AB', 'CD', 'EF', 'GH', 'IJ'],
    'col_4': ['11-110', '20-210', 'N3-303', 'Q4-444', '55-005']
}
df = pd.DataFrame(data)

# 核心处理逻辑
df['col_4'] = df.apply(
    lambda row: row['col_3'] + row['col_4'] if row['col_4'][0].isdigit() else row['col_4'],
    axis=1
)

print(df)

这里axis=1指定按行处理,lambda函数里的逻辑完全匹配你的需求:检查col_4的首字符是不是数字,是就把col_3拼在前面,否则保持col_4不变。


方法二:修改你现有的循环逻辑

如果你想基于自己写的循环来实现,关键是要拿到行的索引,这样才能精准修改DataFrame里的对应值。原来的循环只遍历了col_4的数值,没有关联到具体行,所以没法修改数据。可以用iterrows()来遍历行和索引:

for idx, row in df.iterrows():
    # 判断col_4首字符是否为数字
    if row['col_4'][0].isdigit():
        # 通过索引定位并修改该行的col_4值
        df.loc[idx, 'col_4'] = row['col_3'] + row['col_4']

这样循环的时候,每一行的索引idx和行数据row都能拿到,满足条件时就用df.loc[idx, 'col_4']把拼接后的值赋值回去,就能实现你要的选择性合并了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:48:10