如何解决在每一行上应用函数是否检查行中每一列的条件并应用到所有列
所有学分都归功于关于熊猫的 kaggle 课程 这里是 dataset.head() : enter image description here
这里的任务: 我们想在我们的网站上托管这些葡萄酒评论,但是 80 到 100 分的评分系统太难理解了——我们想将它们翻译成简单的星级评分。 95 分或更高为 3 星,85 分以上低于 95 分为 2 星。任何其他分数均为 1 星。
此外,加拿大葡萄酒商协会在该网站上购买了大量广告,因此任何来自加拿大的葡萄酒都应自动获得 3 星,无论积分如何。
使用与数据集中的每条评论相对应的星数创建一系列 star_ratings。
所以这里的解决方案:
def stars(row):
if row.country == 'Canada':
return 3
elif row.points >= 95:
return 3
elif row.points >= 85:
return 2
else:
return 1
star_ratings = review.apply(stars,axis='columns')
所以我的问题是:我想知道这个解决方案何时在每一行上执行应用函数。是否检查行中每一列的条件并将其应用于所有列,因为它没有指定仅在“点”列上执行
解决方法
有多种条件。一个适用于“国家”列的每一行,而另外两个适用于“点”列。带有 else
的“替代结果”是不满足任何条件。话虽如此,pandas
最好使用 np.select
,以便您的解决方案高度矢量化(运行时间更快):
import numpy as np
star_ratings = np.select([(row.country == 'Canada') | (row.points >= 95),(row.points >= 85)],#condiitons
[3,3],#results
1) #alternative result (like your else)
三个参数参数是条件(所有条件的列表)、结果(按条件顺序排列的结果列表)和替代结果。详情请见 numpy.select。
,创建示例 dataframe
,然后使用您创建的相同函数,您只需执行 .apply()
即可获得所需的结果。
注意:这是一个示例数据集,您可以使用您自己的 wine 数据集,而不是在代码的第二行中创建它。
import pandas as pd
wine = pd.DataFrame({"country": ["Canada","US","Aus"],"points": [85,99,45]})
def stars(row):
if row.country == 'Canada':
return 3
elif row.points >= 95:
return 3
elif row.points >= 85:
return 2
else:
return 1
wine["stars"] = wine.apply(lambda x: stars(x),axis = 1)
说明:
.apply()
函数将任何给定的函数应用于 Pandas dataframe
的每一行/列。由于这里我们要应用到每一行,我们给了一个额外的参数 axis = 1
,轴默认设置为 0(按列)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。