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

如何基于Pandas两列的值更Pythonic地生成新列?

更Pythonic的Pandas列生成方案

针对你需要根据两列0/1值生成新列的需求,这里提供两种更符合Pythonic风格的实现方法,比字符串拼接替换更清晰高效:

方法1:numpy.select(推荐,高性能+可读性强)

numpy.select是处理多条件分支赋值的最优选择之一,性能远优于逐行处理的方法,适合大规模数据集,同时逻辑清晰易维护。

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({'Aa': [1, 0, 1, 0], 'Bb': [1, 1, 0, 0]})

# 定义条件列表和对应的结果值
conditions = [
    (df['Aa'] == 1) & (df['Bb'] == 1),
    (df['Aa'] == 0) & (df['Bb'] == 1),
    (df['Aa'] == 1) & (df['Bb'] == 0),
]
choices = ['Both', 'B', 'A']

# 赋值,未匹配任何条件时用默认值'None'
df['A_B'] = np.select(conditions, choices, default='None')

执行后得到的结果:

Aa  Bb   A_B
0   1   1  Both
1   0   1     B
2   1   0     A
3   0   0  None

方法2:字典映射元组(简洁直观)

将两列的取值组合成元组,通过预定义的字典直接映射结果,代码紧凑易懂,适合中小规模数据集。

import pandas as pd

df = pd.DataFrame({'Aa': [1, 0, 1, 0], 'Bb': [1, 1, 0, 0]})

# 定义映射规则字典
result_map = {
    (1, 1): 'Both',
    (0, 1): 'B',
    (1, 0): 'A',
    (0, 0): 'None'
}

# 逐行将Aa和Bb转为元组后映射
df['A_B'] = df.apply(lambda x: result_map[(x['Aa'], x['Bb'])], axis=1)

两种方法对比

  • 若处理百万级以上大数据集,优先选numpy.select,它是向量化操作,性能比apply高一个数量级;
  • 若追求代码简洁性和可读性,字典映射的方法更直观,规则一目了然。

内容的提问来源于stack exchange,提问作者Ernesto Lopez Fune

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:08:06