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

如何在Python中基于另外两列的条件创建新列?

在Pandas中基于多列条件创建新列

首先构造你的原始DataFrame:

import pandas as pd

df = pd.DataFrame({
    'name': ['apple', 'banana', 'apple', 'pie'],
    'address': ['hello1234', 'happy111', 'str3333', 'diary5144']
})

下面提供几种实现需求的方法:

方法1:使用numpy.select

通过定义条件列表和对应的值列表,批量处理行数据:

import numpy as np

# 定义条件和对应的处理逻辑
conditions = [
    df['name'] == 'apple',
    df['name'] == 'banana',
    df['name'] == 'pie'
]
values = [
    df['address'].str[:5],
    df['address'].str[:4],
    df['address'].str[:3]
]

# 创建新列
df['want'] = np.select(conditions, values)

方法2:字典映射+apply

先建立名字和截取长度的映射关系,再逐行处理:

# 定义名字到截取长度的映射
name_length_map = {'apple':5, 'banana':4, 'pie':3}

# 用apply处理每一行
df['want'] = df.apply(lambda row: row['address'][:name_length_map[row['name']]], axis=1)

方法3:映射长度后批量截取

先通过name列映射得到对应长度,再对address列按长度截取:

name_length_map = {'apple':5, 'banana':4, 'pie':3}
# 先获取每行的截取长度
lengths = df['name'].map(name_length_map)
# 按长度截取address
df['want'] = [addr[:length] for addr, length in zip(df['address'], lengths)]

执行任意一种方法后,你都会得到期望的结果:

nameaddresswant
applehello1234hello
bananahappy111happ
applestr3333str33
piediary5144dia

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:24:22