Python 将值插入新列:ValueError

Python 将值插入新列:ValueError,python,pandas,Python,Pandas,我需要根据来自另一列的条件创建一个新列。 具体来说,我有三个专栏: ID Bought Sold 123 True True 143 False False 154 False True 21 False True 我想创建一个新列(Amount),如下所示: if Sold=True then assign 10 if Sold=False then assign 0 df['Amount'] = np.where(df['Sold'] == True,

我需要根据来自另一列的条件创建一个新列。 具体来说,我有三个专栏:

ID  Bought   Sold
123 True     True
143 False    False
154 False    True
21  False    True
我想创建一个新列(
Amount
),如下所示:

if Sold=True then assign 10
if Sold=False then assign 0

df['Amount'] = np.where(df['Sold'] == True, 10, 0)
但它不起作用。我得到了以下错误:

ValueError: Length of values does not match length of index

您能告诉我如何创建这个新列并分配值吗?

对于Python的Pandas,要比较您没有的布尔值,请使用诸如
==
is
之类的运算符。您可以直接使用列表示True,使用~(相反)表示False:

# You want all values that are True:
df[df['Sold']]

# You want all values that are False:
df[~df['Sold']]
所以,您需要的只是:

df['Amount'] = np.where(df['Sold'], 10, 0)
# the opposite should go as 
# df['Amount'] = np.where(df['Sold'], 0, 10)
要使用运算符==或is,您可以只声明列(True)或不列(False),或者,仅对于pandas~column(False)

您也可以这样做(不过这有点冗长!)


可以很好地处理示例数据。另外
df['Amount']=np。其中(df['salled'],10,0)
也起作用。您的python和pandas版本是什么?@mrbTT:python 3.7.1 pandas版本:1.0.3这不正确
df['salled']==True
有效,在本例中与
df['salled']
相同。非常感谢您的评论和回答。在使用@mrbTT solution之后,我遇到了以下错误:
/anaconda3/lib/python3.7/site packages/ipykernel_launcher.py:1:SettingWithCopyWarning:试图在数据帧的切片副本上设置值。尝试使用.loc[row\u indexer,col\u indexer]=value,请参见文档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a视图与a副本“”“启动IPython内核的入口点。
您知道这意味着什么吗?是的,这只是一个警告,不是错误。这意味着您正在尝试设置一个已经存在值的值(列“Amount”中有一些值,并且您正在用解决方案替换所有内容。如果您先del df['Amount'],您将看到警告不会出现。)
df['Amount'] = 0
df.loc[df['Sold'],'Amount'] = 10