gpt4 book ai didi

python - 在 Pandas 的多列上应用自定义函数

转载 作者:太空狗 更新时间:2023-10-29 21:38:39 25 4
gpt4 key购买 nike

我在 Pandas 中“应用”自定义函数时遇到问题。当我测试该函数时,直接传递它起作用的值并正确返回响应。但是,当我尝试以这种方式传递列值时

def feez (rides, plan):
pmt4 = 200
inc4 = 50 #number rides included
min_rate4 = 4

if plan == "4 Plan":
if rides > inc4:
fee = ((rides - inc4) * min_rate4) + pmt4
else:
fee = pmt4
return (fee)
else:
return 0.1

df['fee'].apply(feez(df.total_rides, df.plan_name))

我收到错误:

“Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。”

直接传递值有效,即 feez (800, "4 Plan"),返回 3200

但是,当我尝试应用上述功能时收到错误消息。

我是新手,怀疑我的语法写得不好。非常感谢任何想法。 TIA。以利

最佳答案

apply 旨在一次处理一行,因此在您这样做时传递整列将不起作用。在这些情况下,最好使用 lambda

df['fee'] = df.apply(lambda x: feez(x['total_rides'], x['plan_name']), axis=1)

但是,可能有更快的方法来做到这一点。一种方法是使用 np.vectorize。另一个是使用 np.where

选项 1
np.vectorize

v = np.vectorize(feez)
df['fee'] = v(df.total_rides, df.plan_name)

选项 2
嵌套 np.where

df['fee'] = np.where(
df.plan_name == "4 Plan",
np.where(df.total_rides > inc4, (df.total_rides - inc4) * min_rate4) + pmt4, pmt4),
0.1
)

关于python - 在 Pandas 的多列上应用自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47372274/

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