我有以下数据框:
df=pd.DataFrame({'state':['AL','WI','FL','NJ','BM'],'country':['USA','USA','','','']})
如果相应的州行位于州列表下方,我尝试将“国家”列填写为“美国”:
states = ['AL', 'WI', 'AZ', 'FL', 'NJ', 'CO', 'CT', 'NY']
我查看了以下相关的SO帖子: Python Dataframe filling NaN values using information from other columns
如果问题类似,我将无法使用apply函数,因为我不知道如何检查值列表中是否有其他列值。我尝试了以下(失败的)代码:
df['country'] = values.where(df['country'] == np.nan and df['state'] in states, others=df['country'])
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
答案 0 :(得分:2)
假设空格为np.nan
,如果不是,则可以替换为df=df.replace('',np.nan)
,然后可以使用numpy.where()
获得更快的结果:
df.country=np.where(df.state.isin(states),df.country.fillna('USA'),df.country)
print(df)
state country
0 AL USA
1 WI USA
2 FL USA
3 NJ USA
4 BM NaN