python - 基于 Python 中数据框的两列创建包含多个级别的新变量
问题描述
我是 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().
谢谢您的帮助!
解决方案
or and and语句需要真值。而在 pandas 中,它们是模棱两可的。所以你需要使用|(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"])
如果您想了解更多信息,请参阅此文档。
推荐阅读
- python - Networkx 获得深度的祖先
- node.js - Node.js、Mongoose:如何将产品添加到购物车?
- azure - 同时使用 Azure AD 和 Azure AD B2C 通过 SSO 进行身份验证
- python - 我可以检测到无限嵌套的列表吗?
- c++ - 从任务管理器详细信息列表视图中获取项目
- swift - AudioKit 5 - 混音器一次只播放 1 个 AmplitudeEnvelope
- javascript - 为下一次加载更改所选导航的背景
- java - Maven 全新安装:无法执行目标 org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
- amazon-web-services - 如何在嵌套堆栈中使用 AWS CloudFormation 模板中的映射
- aframe - Oculus Quest 2 访问的 A-Frame VR 中是否有最近的更改阻止了被跟踪的手?