首页 > 解决方案 > 基于 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().

谢谢您的帮助!

标签: pythonpandas

解决方案


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"])

如果您想了解更多信息,请参阅此文档。


推荐阅读