相关文章推荐
胡子拉碴的硬盘  ·  杜拜旅遊景點行程、住宿推薦,克拉拉旅行社帶您 ...·  1 年前    · 
活泼的罐头  ·  GRACEGIFT官方購物網 | ...·  1 年前    · 
力能扛鼎的咖啡  ·  “新剑”出鞘,风清扬退而不休,回望他与阿里巴 ...·  1 年前    · 
小眼睛的火龙果  ·  全国检察机关坚守职业良知践行执法为民先进事迹 ...·  1 年前    · 
仗义的花生  ·  CSS属性动态传值_css传值-CSDN博客·  1 年前    · 
Code  ›  在 Pandas DataFrame 中应用 IF 条件的5种方法开发者社区
match pandas dataframe numbers
https://cloud.tencent.com/developer/article/2078722
重情义的烤红薯
3 年前
作者头像
披头
0 篇文章

在 Pandas DataFrame 中应用 IF 条件的5种方法

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > datartisan > 在 Pandas DataFrame 中应用 IF 条件的5种方法

在 Pandas DataFrame 中应用 IF 条件的5种方法

作者头像
披头
发布 于 2022-08-22 10:21:58
3.8K 0
发布 于 2022-08-22 10:21:58
举报

本文介绍 Pandas DataFrame 中应用 IF 条件的5种不同方法。

具体来说,有如下5种方法:

  1. Set of numbers
  2. Set of numbers and lambda
  3. Strings
  4. Strings and lambada
  5. OR condition

下面,我们来一起看下几个案例。

(1) IF condition – Set of numbers

假设现在有一个由10个数字构成的 DataFrame ,想应用如下的 IF 条件

  • <= 4时,填值 True
  • > 4时,填值 False

创建该 IF 条件的通用代码结构如下:

df.loc[df['column name'] condition, 'new column name'] = 'value if condition is met'

具体到这个例子,Python 代码可以这么写:

import pandas as pd
numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
df.loc[df['set_of_numbers'] <= 4, 'equal_or_lower_than_4?'] = 'True' 
df.loc[df['set_of_numbers'] > 4, 'equal_or_lower_than_4?'] = 'False' 
print (df)

查询结果如下:

(2) IF condition – set of numbers and lambda

下面看一下使用 lambada 表达式如何实现案例1 的查询结果。

lambada 通用代码结构如下:

df['new column name'] = df['column name'].apply(lambda x: 'value if condition is met' if x condition else 'value if condition is not met')

使用 lambada 实现案例1的代码如下:

import pandas as pd
numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
df['equal_or_lower_than_4?'] = df['set_of_numbers'].apply(lambda x: 'True' if x <= 4 else 'False')
print (df)

查询结果如下,与案例1相同

(3) IF condition – strings

现在,我们创建一个仅包含 Jon, Bill, Maria and Emma 等文本内容的 DataFrame ,IF 条件如下:

  • 当 name 是 Bill 时,填值 Match
  • 当 name 不是 Bill 时,填值 Mismatch

实现代码如下:

import pandas as pd
names = {'First_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['First_name'])
df.loc[df['First_name'] == 'Bill', 'name_match'] = 'Match'  
df.loc[df['First_name'] != 'Bill', 'name_match'] = 'Mismatch'  
print (df)

查询结果如下:

(4) IF condition – strings and lambada

使用 lambada 表达式实现案例3的代码如下:

import pandas as pd
names = {'First_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['First_name'])
df['name_match'] = df['First_name'].apply(lambda x: 'Match' if x == 'Bill' else 'Mismatch')
print (df)

查询结果如下:

(5) IF condition with OR

最后的案例中,我们尝试实现下面的 IF 条件:

  • 当 name 是 Bill 或者 Emma 时,填值 Match
  • 当 name 既不是 Bill 也不是 Emma 时,填值 Mismatch

实现代码如下:

import pandas as pd
names = {'First_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['First_name'])
df.loc[(df['First_name'] == 'Bill') | (df['First_name'] == 'Emma'), 'name_match'] = 'Match'  
df.loc[(df['First_name'] != 'Bill') & (df['First_name'] != 'Emma'), 'name_match'] = 'Mismatch'  
print (df)

查询结果如下:

在原始DataFrame列上应用 IF 条件

上面的案例中,我们学习了如何在新增列中应用 IF 条件,有时你可能会遇到将结果存储到原始 DataFrame 列中的需求。

假设,我们创建了一个包含12个数字的 DataFrame ,其最后的两个数字为0。

`set_of_numbers`: [1,2,3,4,5,6,7,8,9,10,0,0]

计划应用以下 IF 条件,然后将结果存储在现有的 set_of_numbers 列中:

  • 如果数字等于0,将该列数字调整为999
  • 如果数字等于5,将该列数字调整为555
import pandas as pd
numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10,0,0]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
print (df)
df.loc[df['set_of_numbers'] == 0, 'set_of_numbers'] = 999
df.loc[df['set_of_numbers'] == 5, 'set_of_numbers'] = 555
print (df)

下面是调整前后的结果,5变成了555,0变成了999。

在另一个实例中,假设有一个包含 NaN 值的 DataFrame。然后,可以应用 IF 条件将这些值替换为零,如下为示例代码:

import pandas as pd
import numpy as np
numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10,np.nan,np.nan]}
 
推荐文章
胡子拉碴的硬盘  ·  杜拜旅遊景點行程、住宿推薦,克拉拉旅行社帶您探索黃金國度文化
1 年前
活泼的罐头  ·  GRACEGIFT官方購物網 | 流行女鞋推薦首選品牌
1 年前
力能扛鼎的咖啡  ·  “新剑”出鞘,风清扬退而不休,回望他与阿里巴巴的风雨20年丨大咖录
1 年前
小眼睛的火龙果  ·  全国检察机关坚守职业良知践行执法为民先进事迹英模报告会
1 年前
仗义的花生  ·  CSS属性动态传值_css传值-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号