0

我正在学习 Pandas,我偶然发现了一个练习,该练习希望我在酒精消费者数据集中创建一个新列(称为合法饮酒者)并用值 True / False 填充它:如果消费者年龄超过 17 岁,则为 True,False如果不。

我无法弄清楚为什么一个版本的代码有效,而另一个版本会引发错误。请问你能帮帮我吗?:)

# Works just fine:
def majority(x):
    if x > 17:
        return True
    else:
        return False

df["legal_drinker"] = df["age"].apply(majority) # new col created

# Doesn't work:
def majority(x):
    if x["age"] > 17:
        return True
    else:
        return False

df["legal_drinker"] = df.apply(majority)
4

1 回答 1

0

第二个函数显式检查['age']作为参数传递的 DataFrame x 的列。
但是,该函数将您的多数函数应用于DataFramedf.apply(majority)的每一列。df这意味着x传入的majority(x)将是 DataFrame 的单列。
当然,单个列没有列['age'](或任何其他列),因此解释器找不到它并抛出错误。
如上述评论所述,实现此目的的一种更短的方法是:

df['legal_drinker'] = df['age'] > 17
于 2019-07-23T17:57:56.963 回答