10: return 1 else: re-6ren">
gpt4 book ai didi

python - 关于 lambda 的另一个问题,这里的 "k"是什么意思?

转载 作者:行者123 更新时间:2023-12-04 09:22:02 24 4
gpt4 key购买 nike

谁能告诉我这里的k是什么?

def rule(x, y):
if x == 'high' and y > 10:
return 1
else:
return 0
df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]})
df['new'] = df.apply(lambda k: rule(k['c1'], k['c2']), axis = 1)
df.head()
为什么我不能只使用以下内容?
df['new'] = df["c1","c2"].apply(rule['c1'], ['c2'])

最佳答案

这里有两个方面需要理解。func的论据在 obj.apply(func)这取决于。您可以控制作为参数传递给 func 的内容。 :

  • 如果obj是一个pandas.DataFrame,就像你在df[["c1", "c2"]]上使用apply一样或只是 df ,然后引用 documentation of pd.DataFrame.apply() .请注意,还有参数 axis您可以使用它来控制函数是应用于行 (1) 还是列(0,默认)。然后,有参数 raw可用于定义参数是否传递给 func将是 pd.Series (False, Default) 或 numpy 数组 (True)。
    因此,默认情况下,列被传递给 func (如.pd.系列)。现在,既然你有 axis=1 ,数据逐行传递,如 pd.Series。这意味着 k 的类型将是 pd.Series,它将包含一行的数据。
  • 如果obj如果您使用 df["col"],则是 pandas.Series ,然后引用 documentation of pandas.Series.apply() .如您所见,在这种情况下,pandas 会将 Series 中的每个元素提供给函数(如果 func 一次处理一个值)或整个数组(如果 func 是 numpy ufunc)。

  • lambda 只是函数 k在 lambda 中只是参数的名称。看,例如
    myfunc = lambda k: rule(k['c1'], k['c2'])
    大致相当于
    def myfunc(k):
    return rule(k['c1'], k['c2'])
    为什么我不能只申请以下?
    在以下行中
    df['new'] = df["c1","c2"].apply(rule['c1'], ['c2'])
    传递给 apply 的参数将无法调用,这就是它不起作用的原因。自 rule是一个函数, rule['c1']没有意义。该函数没有属性“c1”。

    如果您只想知道应该如何完成,我建议您使用 np.vectorize就像@ipj 的回答一样。

    关于python - 关于 lambda 的另一个问题,这里的 "k"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63086396/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com