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

如何处理DataFrame:当Col2无DB值时将内容合并至Col1?

处理DataFrame列合并需求的实现方案

需求回顾

原始DataFrame结构:

Col1      Col2     Col3
listerine DB0076 
listerine DB0076
nicotine  Acetate  DB0071

目标是:若Col2不含"DB"字样,将Col2内容合并到Col1,同时将Col3内容移至Col2,最终得到两列结构:

Col1               Col2
listerine          DB0076 
listerine          DB0076
nicotine Acetate   DB0071

代码实现

方法一:向量化处理(高效适合大数据量)

利用numpy.where实现批量判断和赋值,避免逐行循环,性能更优:

import pandas as pd
import numpy as np

# 构造示例数据(实际使用时替换为你的DataFrame)
data = {
    'Col1': ['listerine', 'listerine', 'nicotine'],
    'Col2': ['DB0076', 'DB0076', 'Acetate'],
    'Col3': ['', '', 'DB0071']
}
df = pd.DataFrame(data)

# 1. 合并Col1与Col2(当Col2不含"DB"时)
df['Col1'] = np.where(
    ~df['Col2'].str.contains('DB', na=False),
    df['Col1'] + ' ' + df['Col2'],
    df['Col1']
)

# 2. 将Col3内容替换到Col2(当Col2不含"DB"时)
df['Col2'] = np.where(
    ~df['Col2'].str.contains('DB', na=False),
    df['Col3'],
    df['Col2']
)

# 3. 删除多余的Col3列
df = df.drop('Col3', axis=1)

方法二:逐行处理(直观适合小数据量)

用apply逐行遍历处理逻辑,代码更易读,适合数据量较小的场景:

import pandas as pd

# 构造示例数据
data = {
    'Col1': ['listerine', 'listerine', 'nicotine'],
    'Col2': ['DB0076', 'DB0076', 'Acetate'],
    'Col3': ['', '', 'DB0071']
}
df = pd.DataFrame(data)

def process_single_row(row):
    if 'DB' not in row['Col2']:
        row['Col1'] = f"{row['Col1']} {row['Col2']}"
        row['Col2'] = row['Col3']
    return row

# 应用处理逻辑并删除Col3
df = df.apply(process_single_row, axis=1).drop('Col3', axis=1)

验证结果

执行后得到的DataFrame即为目标格式:

Col1    Col2
0      listerine  DB0076
1      listerine  DB0076
2  nicotine Acetate  DB0071

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:30:58