如何在DataFrame中使用If-Else条件语句创建新列

大邓和他的Python

共 2139字,需浏览 5分钟

 · 2021-11-01

93609a412433d1d007e55a3da1402d5e.webp


有时我们希望根据 DataFrame 其他列(字段) 的值向 DataFrame 添加一列。

虽然这听起来很简单,但如果我们尝试使用 if-else 条件来完成它可能会变得有点复杂。值得庆幸的是,使用 numpy 两个函数np.where()、np.select() 就能实现这一需求。


导入数据

我们有一个包含 4,000 多条 Dataquest 推文的数据集,字段包括:

  • date  twitter发送的日期
  • time  推文发送时间
  • tweet   推文内容
  • mentions    谁提到了该推文
  • photos    图片链接
  • replies_count  推文回复数
  • retweets_count  推文再转发数
  • likes_count  推文获得的点赞数
import pandas as pd
import numpy as np

df = pd.read_csv('tweets.csv')
df.head()

45bf7c9cb56f0323196bbadbad69d686.webp



问题

我们看到数据集中的photos字段是图片链接

  • 如果某条记录有信息,会显示图片链接列表
  • 如果不含图片,该字段对应的数据是空列表

我们只想查看带有图片的推文是否获得更多交互,因此我们实际上并不需要图片 URL。让我们尝试创建一个名为 has_image 的新列,该列将包含布尔值

  • 如果推文包含图像,则为 True,否则为 False。

那么我们如何创建一个has_image字段?



np.where()

np.where(condition, value if condition is true, value if condition is false)

为此,我们将使用 numpy 的内置 where() 函数。这个函数依次接受三个参数:我们要测试的条件,如果条件为真则分配给新列的值,如果条件为假则分配给新列的值。它看起来像这样:

df['has_image'] = np.where(df['photos']!='[]'TrueFalse)
df.head()

3abf03330fb9916f6014860143e5ee3f.webp



np.select()

这种方法很好用,但如果我们新建列的值不止True、False呢?

例如我们把likes_count 进行分类,不同取值范围定义为不同的类别

  • tier_4  少于2个赞
  • tier_3  3-9 个赞
  • tier_2  10-15 个赞
  • tier_1  16+ 个赞

为此,我们可以使用名为 np.select() 的函数。我们将给它两个参数:一个我们的条件列表,以及一个我们想要分配给新列中每一行的值的相关列表。

这意味着顺序很重要:如果满足条件列表中的第一个条件,则值列表中的第一个值将分配给该行的新列。如果满足第二个条件,则将分配第二个值,依此类推。

让我们来看看它在 Python 代码中的表现:

# create a list of our conditions
conditions = [
    (df['likes_count'] <= 2),
    (df['likes_count'] > 2) & (df['likes_count'] <= 9),
    (df['likes_count'] > 9) & (df['likes_count'] <= 15),
    (df['likes_count'] > 15)
    ]

# create a list of the values we want to assign for each condition
values = ['tier_4''tier_3''tier_2''tier_1']

# create a new column and use np.select to assign values to it using our lists as arguments
df['tier'] = np.select(conditions, values)

# display updated DataFrame
df.head()

2af7f3aad95007dbdf9662ad247011f4.webp


代码下载

https://github.com/hidadeng/DaDengAndHisPython/tree/master/20211031如何在DataFrame中使用If-Else条件语句创建新列


近期文章

视频专栏课 | Python网络爬虫与文本分析

BERTopic 主题建模库 | 建议收藏

Shifterator库 | 词移图分辨两文本用词风格差异

DataShare | 6000+个股票的每日财经新闻  

SmartScraper | 简单、自动、快捷的Python网络爬虫

SHAP | 机器学习模型解释库

读完本文你就了解什么是文本分析

文本分析在经管领域中的应用概述

综述:文本分析在市场营销研究中的应用

文本分析方法在《管理世界》(2021.5)中的应用

中文金融情感词典发布啦 | 附代码

wordexpansion包 | 新增词向量法构建领域词典

语法最简单的微博通用爬虫weibo_crawler

hiResearch 定义自己的科研首页

SciencePlots | 科研样式绘图库

plydata库 | 数据操作管道操作符>>

plotnine: Python版的ggplot2作图库

Wow~70G上市公司定期报告数据集

漂亮~pandas可以无缝衔接Bokeh  

YelpDaset: 酒店管理类数据集10+G

浏览 51
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报