如何在指定行用if逻辑处理Pandas DataFrame的GDP_Growth列?
正确实现方法
你的代码报错是因为直接用if判断布尔Series,而Python的if需要单个布尔值,无法处理pandas返回的布尔序列。下面是两种可行的实现方式:
方法1:使用loc条件赋值
先将目标列初始化为NaN,再给满足条件的行赋值:
import numpy as np # 先把GDP_Growth列全部设为NaN unp['GDP_Growth'] = np.nan # 仅对TIME>2014的行计算并赋值 unp.loc[unp['TIME'] > 2014, 'GDP_Growth'] = unp['GDP_CAP'] - unp['GDP_CAP'].shift(1)
注意:如果你的DataFrame没有按TIME排序,建议先执行排序保证shift(1)取到的是上一年的数据:
unp = unp.sort_values('TIME')
方法2:使用np.where一行实现
利用numpy的向量化条件判断,直接生成目标列:
import numpy as np unp['GDP_Growth'] = np.where( unp['TIME'] > 2014, unp['GDP_CAP'] - unp['GDP_CAP'].shift(1), np.nan )
如果你的实际需求是TIME不等于2014(而非仅大于2014),只需把条件改成unp['TIME'] != 2014即可。
内容的提问来源于stack exchange,提问作者James C
相关产品推荐
相关产品推荐

