根据给出ValueError的函数制作新列

时间:2019-06-26 08:32:55

标签: python

我有一个包含两列的数据框:一列包含零和一个值,另一列包含数字值。

  ZeroOne   Value
    0       10
    1       20
    0       15

目标是创建一个新列,如果ZeroOne列包含“ 0”,则在其中放置value列的值。如果ZeroOne值为1,则新列应为0。因此,在我的示例中,结果应为:

  ZeroOne   Value   Result
   0        10          10
   1        20           0
   0        15          15

我试图做一个函数:

def function(a,b):
    if a == 1:
        return b
    else:
        return 0

然后使变量a和b

    a = df['ZeroOne']
    b = df['Value']

然后,我添加了具有此功能的新列

   df['result'] = function(a,b)

它一直给我带来价值错误:

   The truth value of a Series is ambiguous. Use a.empty, a.bool(), 
   a.item(), a.any() or a.all().

如何获得结果,我在做错什么?

2 个答案:

答案 0 :(得分:2)

尝试使用where

import pandas as pd

df = pd.DataFrame.from_dict({"ZeroOne": [0, 1, 0], "Value": [10, 20, 15]})

df['Result'] = (df['Value'].where(cond=df['ZeroOne'] == 0, other=0))

print(df)

输出:

   Value  ZeroOne  Result
0     10        0      10
1     20        1       0
2     15        0      15

答案 1 :(得分:1)

在这种情况下,您可以使用numpy库中的np.where

df['Result'] = np.where(df['ZeroOne'] == 0, df['Value'], 0)

它与Adams Soluation类似,但是您也可以向其添加其他条件,该函数的第一个空格为您提供条件,如果条件为True,则发生情况,如果错误,则发生情况。