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

如何基于其他列计算值新增数据列?求替代numpy的实现方法

如何在Pandas中基于已有列的计算结果新增数据列?

我想基于已有列的计算结果新增一个数据列。具体需求为:新增名为'small'的列,当'value'列的值小于5时,该列取值为1,否则取值为0。我已了解可通过numpy实现,代码如下:

import pandas as pd
import numpy as np
rawData = pd.read_csv('data.csv', encoding = 'ISO-8859-1')
rawData['small'] = np.where(rawData['value'] < 5, '1', '0')

请问还有其他实现方法吗?


当然有不少更简洁或者更灵活的替代方案,我给你分享几个常用的:

方法1:布尔值直接转整数(最简洁)

Pandas的布尔序列可以直接通过astype(int)转换成整数,True会变成1,False变成0,完美匹配你的需求:

import pandas as pd
rawData = pd.read_csv('data.csv', encoding='ISO-8859-1')
rawData['small'] = (rawData['value'] < 5).astype(int)

这个方法比np.where更简洁,而且性能也很不错,因为是Pandas原生的向量化操作。

方法2:使用apply自定义判断

如果之后你的判断逻辑变得复杂(比如多条件嵌套),apply可以让你写更灵活的自定义函数,虽然对于这种简单场景性能不如向量化操作,但胜在直观易懂:

rawData['small'] = rawData['value'].apply(lambda x: 1 if x < 5 else 0)

这里用lambda表达式对每个'value'值做判断,返回对应的1或0。

方法3:使用pd.cut处理区间判断

如果以后需要扩展到多个区间的分类(比如小于5、5-10、大于10),pd.cut会是个很好的工具,针对当前需求也能实现:

rawData['small'] = pd.cut(
    rawData['value'],
    bins=[-float('inf'), 5, float('inf')],  # 划分区间:小于5,大于等于5
    labels=[1, 0]  # 对应区间的标签
).astype(int)

这种方法的优势在于扩展性强,后续调整区间只需要修改bins和labels即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:32:45