如何根据Pandas DataFrame中amount列正负为country列赋值
Pandas条件赋值解决方案
针对需求,这里提供两种常用的实现方式:
方法一:使用numpy.where简洁处理
np.where可通过一次判断完成条件赋值,代码简洁高效:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'N': [0, 1], 'amount': [-15678, 3475], 'country': [np.nan, np.nan], 'codeA': ['CH', 'POL'], 'codeB': ['US', 'FR'] }) # 核心逻辑:amount为负取codeA,为正取codeB df['country'] = np.where(df['amount'] < 0, df['codeA'], df['codeB'])
方法二:使用pd.DataFrame.loc逐条件赋值
这种方式逻辑更直观,适合分步理解条件筛选与赋值:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'N': [0, 1], 'amount': [-15678, 3475], 'country': [np.nan, np.nan], 'codeA': ['CH', 'POL'], 'codeB': ['US', 'FR'] }) # 处理amount为负的情况:将codeA赋值给country df.loc[df['amount'] < 0, 'country'] = df.loc[df['amount'] < 0, 'codeA'] # 处理amount为正的情况:将codeB赋值给country df.loc[df['amount'] > 0, 'country'] = df.loc[df['amount'] > 0, 'codeB']
处理后结果
执行上述任意一种方法后,DataFrame会变为:
N amount country codeA codeB 0 0 -15678 CH CH US 1 1 3475 FR POL FR
内容的提问来源于stack exchange,提问作者Sallyerik
相关产品推荐
相关产品推荐

