在每一行上应用函数。它是否检查行中每一列的条件并应用于所有列

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(按列)