我想根据多列条件重新分配值,但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 == NonedfAge CountryBorn YearsInCanada87 NaN 77 67 Canada 6729 US 726 US 1022 US 1235 Canada NaN45 Canada NaNexpected outputAge CountryBorn YearsInCanada87 NaN 77 67 Canada 6729 US 726 US 1022 US 1235 Canada 3545 Canada 45我的以下代码显示 ValueError if df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]: df['YearsInCanada'] == df['Age'] else: df['YearsInCanada'] == df['YearsInCanada']谢谢
2 回答

隔江千里
TA贡献1906条经验 获得超10个赞
解决方案使用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

Smart猫小萌
TA贡献1911条经验 获得超7个赞
df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]
这将返回一个(派生的)数据帧。 if
需要一个布尔表达式。
如果您尝试进行矢量化分配,则必须将其编码为 Pandas 操作 + 过滤器,而不是 Python if
。
添加回答
举报
0/150
提交
取消