如何处理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
相关产品推荐
相关产品推荐

