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

如何以最Pythonic的方式为Pandas DataFrame按列条件添加权重列?

给Pandas DataFrame添加条件列的最Pythonic方式

先回顾下我们的场景:
我们有这样一个基础的DataFrame:

import pandas as pd
df = pd.DataFrame({'A' : [1, 2, 3], 'B' : [4, 5, 6]})

它的输出是:

A  B
0  1  4
1  2  5
2  3  6

现在需要新增一列weight,规则很明确:当B列的值≥6时,weight设为20,否则设为1,预期得到的结果是:

A  B  weight
0  1  4       1
1  2  5       1
2  3  6      20

下面几种都是很Pythonic的实现方式,优先推荐前两种:

1. 使用numpy.where(最直观高效)

一行代码就能搞定,逻辑清晰到一眼就能看懂,绝对是首选:

import numpy as np
df['weight'] = np.where(df['B'] >= 6, 20, 1)

它的逻辑就是:np.where(判断条件, 条件满足时的赋值, 条件不满足时的赋值),完美契合我们的需求,而且处理大数据集时效率也很高。

2. 纯Pandas实现(无需额外导入库)

如果不想引入numpy,用Pandas自身的方法也能写出简洁的代码:

# 方式A:用replace映射布尔值
df['weight'] = df['B'].ge(6).replace({True: 20, False: 1})

# 方式B:用map映射布尔值
df['weight'] = df['B'].ge(6).map({True: 20, False: 1})

这里ge(6)是Pandas里的方法,等价于>=6,会返回一个布尔类型的Series,接着用replace或map把True和False转换成我们需要的数值,同样很简洁。

3. 使用apply(不推荐,仅作参考)

虽然这种写法也能实现需求,但对于大规模数据集来说,apply的效率远不如前面两种,所以一般不推荐:

df['weight'] = df['B'].apply(lambda x: 20 if x >= 6 else 1)

总的来说,优先选numpy.where或者纯Pandas的映射方法,既符合Python的简洁风格,又能保证运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:00:02