使用np.where或者apply lambda函数结合if else生成新的字段

252 篇文章 ¥59.90 ¥99.00
本文介绍了在Python数据分析中,如何使用np.where和apply lambda函数结合if else语句根据条件生成新的字段。通过示例详细解释了两种方法的用法和适用场景。

使用np.where或者apply lambda函数结合if else生成新的字段

在Python中,我们经常需要根据条件来生成新的字段或者修改现有字段的值。为了实现这个目标,我们可以使用NumPy库中的np.where函数或者Pandas库中的apply lambda函数结合if else语句。这两种方法都提供了一种灵活的方式来根据条件执行不同的操作。

首先,让我们来介绍np.where函数的用法。np.where函数可以根据条件返回一个新的数组,其中满足条件的元素被替换为一个值,不满足条件的元素保持原样。下面是np.where函数的基本语法:

np.where(condition, x, y)
  • condition:一个布尔数组或者条件表达式,用于指定替换的条件。
  • x:满足条件的元素将被替换为x。
  • y:不满足条件的元素将被替换为y。

接下来,让我们通过一个示例来演示np.where函数的用法。假设我们有一个包含成绩的数组,我们想要根据成绩是否大于等于60来生成新的字段,表示及格或不及格。代码如下:


                
第1关:Apply函数处理 300 学习内容 参考答案 记录 评论 任务描述 相关知识 Series.apply() DataFrame.apply() 编程要求 测试说明 任务描述 本关任务:使用Apply函数按要求处理数据。 相关知识 为了完成本关任务,你需要掌握:apply()函数。 Series.apply() 回到主题, pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame,功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。 举一个例子,现在有这样一组数据,学生的考试成绩: Name Nationality Score 张 汉 400 李 回 450 王 汉 460 如果民族不是汉族,则总分在考试分数上再加 5 分,现在需要用 pandas 来做这种计算,我们在 Dataframe 中增加一列。当然如果只是为了得到结果, numpy.where() 函数更简单,这里主要为了演示 Series.apply() 函数的用法。 import pandas as pd df = pd.read_csv("studuent-score.csv") df['ExtraScore'] = df['Nationality'].apply(lambda x : 5 if x != '汉' else 0) df['TotalScore'] = df['Score'] + df['ExtraScore'] 对于 Nationality 这一列, pandas 遍历每一个值,并且对这个值执行 lambda 匿名函数,将计算结果存储在一个新的 Series 中返回。上面代码在 jupyter notebook 中显示的结果如下: Name Nationality Score ExtraScore TotalScore 0 张 汉 400 0 400 1 李 回 450 5 455 2 王 汉 460 0 460 apply() 函数当然也可执行 python 内置的函数,比如我们想得到 Name 这一列字符的个数,如果用 apply() 的话: df['NameLength'] = df['Name'].apply(len) DataFrame.apply() DataFrame.apply() 函数则会遍历每一个元素,对元素运行指定的 function。比如下面的示例: import pandas as pd import numpy as np matrix = [ [1,2,3], [4,5,6], [7,8,9] ] df = pd.DataFrame(matrix, columns=list('xyz'), index=list('abc')) df.apply(np.square) 对 df 执行 square() 函数后,所有的元素都执行平方运算: x y z a 1 4 9 b 16 25 36 c 49 64 81 如果只想 apply() 作用于指定的行和列,可以用行或者列的 name 属性进行限定。比如下面的示例将 x 列进行平方运算: df.apply(lambda x : np.square(x) if x.name=='x' else x) x y z a 1 2 3 b 16 5 6 c 49 8 9 下面的示例对 x 和 y 列进行平方运算: df.apply(lambda x : np.square(x) if x.name in ['x', 'y'] else x) x y z a 1 4 3 b 16 25 6 c 49 64 9 下面的示例对第一行 (a 标签所在行)进行平方运算: df.apply(lambda x : np.square(x) if x.name == 'a' else x, axis=1) 默认情况下 axis=0 表示按列,axis=1 表示按行。 apply() 计算日期相减示例 平时我们会经常用到日期的计算,比如要计算两个日期的间隔,比如下面的一组关于 wbs 起止日期的数据: wbs date_from d
最新发布
10-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值