慕田峪7331174
2021-11-23 19:12:50
我想根據多列條件重新分配值,但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
提交
取消