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

Python pandas DataFrame中如何拆分列元素并使用其他列值替换指定部分

解决方案

方法1:向量化操作(推荐,效率最高)

直接用np.where配合pandas内置的字符串方法实现,不需要循环,代码如下:

import pandas as pd
import numpy as np

# 你的示例数据
d = {'col1': ['a b', 'a c'], 'col2': ['z 26', 'y 25']}
df = pd.DataFrame(data=d)

# 生成col3的核心逻辑
df['col3'] = np.where(
    df['col1'] == 'a b',  # 匹配条件:col1等于a b
    # 满足条件时,取col1拆分后的第一个元素 + 空格 + col2拆分后的第一个元素
    df['col1'].str.split(' ').str[0] + ' ' + df['col2'].str.split(' ').str[0],
    df['col1']  # 不满足条件直接保留col1原值
)

print(df)

输出结果和你要求的完全一致:

col1  col2 col3
0  a b  z 26  a z
1  a c  y 25  a c

方法2:apply自定义逻辑(适合更复杂的替换规则)

如果后续替换规则变复杂,可以用apply逐行处理:

def gen_col3(row):
    if row['col1'] == 'a b':
        col1_part = row['col1'].split(' ')[0]
        col2_part = row['col2'].split(' ')[0]
        return f"{col1_part} {col2_part}"
    else:
        return row['col1']

df['col3'] = df.apply(gen_col3, axis=1)

之前写法报错原因

  1. 第一种写法错误:
    • np.where第一个参数需要传入和行数长度一致的布尔数组,你传入了df[df['col1']=='a b']是过滤后的子DataFrame,维度不匹配
    • 字符串拆分后直接写[1]是取整个Series的第1个元素,不是取每行拆分后的对应位置的值,需要加.str访问每行的元素
  2. 第二种写法错误:
    • 循环中直接修改x不会同步修改原DataFrame的值
    • df['col1'].str.split(' ')[1]返回的是Series对象,不是单个字符串,不符合replace方法的参数要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:18:00