我想根据多个列条件重新分配值,但会出现ValueError
。我使用&
而不是and
,这通常是解决这种错误的答案。我的目标和代码如下:
ValueError: The truth value of a DataFrame is ambiguous.
Use a.empty, a.bool(), a.item(), a.any() or a.all().
如果YearsInCanada == Age
和CountryBorn == Canada
,我想重新编码YearsInCanada == None
df
Age CountryBorn YearsInCanada
87 NaN 77
67 Canada 67
29 US 7
26 US 10
22 US 12
35 Canada NaN
45 Canada NaN
expected output
Age CountryBorn YearsInCanada
87 NaN 77
67 Canada 67
29 US 7
26 US 10
22 US 12
35 Canada 35
45 Canada 45
我的以下代码显示了ValueError
if df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]:
df['YearsInCanada'] == df['Age']
else:
df['YearsInCanada'] == df['YearsInCanada']
谢谢
使用np.where()
的解决方案:
df.YearsInCanada=np.where((df['YearsInCanada'].isna()) & (df['CountryBorn'] == 'Canada'),\
df.YearsInCanada.fillna(df.Age),df.YearsInCanada)
print(df)
Age CountryBorn YearsInCanada
0 87 NaN 77.0
1 67 Canada 67.0
2 29 US 7.0
3 26 US 10.0
4 22 US 12.0
5 35 Canada 35.0
6 45 Canada 45.0
df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]
这将返回(派生)数据框。 qazxsw poi需要一个布尔表达式。
如果您正在尝试进行矢量化赋值,则必须将其编码为Pandas动作+过滤器,而不是Python if
。