基于 Python 中数据框的两列创建一个包含多个级别的新变量

时间:2021-07-21 03:13:02

标签: python pandas

我是 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().

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

orand 语句需要真值。在熊猫中,它们模棱两可。所以你需要使用 |(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