Python ValueError:在创建新列时,序列的真值不明确
使用Pandas 1.0中的Python ValueError:在创建新列时,序列的真值不明确,python,pandas,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 )
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
)
相反,我得到:
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(),但没有得到预期的结果。按
&
对按位和:
df = pd.DataFrame({'val': [10, 2, 0, 1, 0.4, 2]})
df = df.assign(flag= (df['val'] < 0.5) & (df['val'] != 0))
我认为可以跳过
lambda
df['val']<0.5
应该足够了。@HenryYik-是的,这取决于链。@HenryYik我更正了我的输出,当val=0时,输出应该是False
。我不明白为什么我不能在lambda中指定一个更复杂的条件语句而不得到那个错误。
df = pd.DataFrame({'val': [10, 2, 0, 1, 0.4, 2]})
df = df.assign(flag= (df['val'] < 0.5) & (df['val'] != 0))
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