我是 Python 的新手。我正在尝试基于数据集中的两列创建一个新变量。
def cal_freqw(var1, var2):
if var1 == 1:
return 0
elif (var1 == 2 and var2 < 998):
return 7*var2
elif var == 3:
return var2/31;
elif var1 == 98:
return 9998
elif var2 == 998:
return 9998
df["FREQW"]=cal_freqw(df["UNIT"], df["NUM"])
我收到此错误消息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
df["UNIT"] 和 df["NUM"] 是整数。(更正:整数系列)
因为我有几个变量要计算,比如“UNIT”和“NUM”,一个函数会有所帮助。有人可以帮我修复我的呼叫命令吗?谢谢!
编辑Zichzheng和其他人建议的代码后,我仍然收到以下错误消息:
2
3 def cal_freqw(var1, var2):
----> 4 if var1 == 1:
5 return 0
6 elif (var1 == 2 & var2 < 998):
1477 1 2
1478 0 10.0 20.0
-> 1479 >>> df.equals(different_data_type)
1480 False
1481 """
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
感谢您的帮助!
答案 0 :(得分:1)
or 和 and 语句需要真值。在熊猫中,它们模棱两可。所以你需要使用 |(OR) 和 &(AND) 来替换它们。
因此,您的代码将是:
def cal_freqw(var1, var2):
if var1 == 1:
return 0
elif (var1 = 2) & (var2 < 998):
return 7*var2
elif var == 3:
return var2/31;
elif var1 == 98:
return 9998
elif var2 == 998:
return 9998
df["FREQW"]=cal_freqw(df["UNIT"], df["NUM"])
如果您想了解更多信息,请参阅 this document。