在每一行上应用函数。它是否检查行中每一列的条件并应用于所有列
Applying functions on each row. is it checking the condition for every column in the row and applying on all of them
pandas 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 = reviews.apply(星星,坐标轴='columns')
所以这是我的问题:我想知道此解决方案何时对每一行执行应用功能。它是否检查行中每一列的条件并应用于所有列,因为它没有指定仅在 'points' 列
上执行
有多个条件。一个适用于“国家”列的每一行,而另外两个适用于“点”列。 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()
即可获得所需结果。
注意:这是一个示例数据集,您可以使用自己的葡萄酒数据集,而不是在代码的第二行创建它。
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
的每个 row/column。因为这里我们要应用到每一行,我们给了一个额外的参数,axis = 1
,轴默认设置为 0(按列)
pandas 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 = reviews.apply(星星,坐标轴='columns')
所以这是我的问题:我想知道此解决方案何时对每一行执行应用功能。它是否检查行中每一列的条件并应用于所有列,因为它没有指定仅在 'points' 列
上执行有多个条件。一个适用于“国家”列的每一行,而另外两个适用于“点”列。 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()
即可获得所需结果。
注意:这是一个示例数据集,您可以使用自己的葡萄酒数据集,而不是在代码的第二行创建它。
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
的每个 row/column。因为这里我们要应用到每一行,我们给了一个额外的参数,axis = 1
,轴默认设置为 0(按列)