ValueError:创建新列时,系列的真值不明确

时间:2020-04-29 07:53:00

标签: python pandas

在Pandas 1.0中使用assign,我想基于以下逻辑创建一个新的标志列:

import numpy as np
import pandas as pd

df = pd.DataFrame({'val': [10, 2, 0, 1, 0.4, 2]})
df = df.assign(
    flag=lambda x: False if np.bool(x['val'] == 0) else True if np.bool(x['val'] < 0.5) else False
)

我希望:

df
   val    flag
0   10    False
1    2    False
2    0    False
3    1    False
4    0.4  True
5    2    False

相反,我得到了:

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

我尝试使用np.where(),np.any(),np.all(),但没有得到预期的结果。

1 个答案:

答案 0 :(得分:2)

&对按位AND的束缚条件:

df = pd.DataFrame({'val': [10, 2, 0, 1, 0.4, 2]})

df = df.assign(flag= (df['val'] < 0.5) & (df['val'] != 0))

如果val是通过某种链式方法计算的,则必须使用lambda:

df = df.assign(flag=lambda x: (x['val'] < 0.5) & (x['val'] != 0))
print (df)
    val   flag
0  10.0  False
1   2.0  False
2   0.0  False
3   1.0  False
4   0.4   True
5   2.0  False