在Pandas DataFrame中仅为指定周期年份计算新列C
按特定年份规则计算Pandas DataFrame新列
需求说明
给DataFrame添加列C,仅满足以下两个条件时执行计算:
- 年份属于每10年周期内的3、5、7、10年(如3、5、7、10、13、15、17、20……这类年份)
- 年份≤40(处于前50年范围内,实际数据到40年)
计算公式:C = 0.06*(A + B),不满足条件的年份可设为NaN或指定默认值。
实现步骤与代码
构造条件判断逻辑
通过年份对10取模,判断模值是否在{3,5,7,0}(10年的模为0,对应周期内第10年),同时限制年份≤40。代码实现
import pandas as pd import numpy as np # 构造示例DataFrame,Year从1到40 df = pd.DataFrame({ 'Year': range(1, 41), 'A': [2000 * i for i in range(1, 41)], 'B': [200 * i for i in range(1, 41)] }) # 定义符合计算要求的条件 target_mods = {3, 5, 7, 0} condition = (df['Year'] % 10).isin(target_mods) & (df['Year'] <= 40) # 计算列C:符合条件用公式,否则设为NaN(可替换为0等其他值) df['C'] = np.where(condition, 0.06 * (df['A'] + df['B']), pd.NA)
补充说明
- 用
np.where替代apply,在大数据量场景下效率更高; - 若需要将非目标年份的
C设为0,只需把pd.NA替换为0即可; - 若要扩展到任意年份n,只需将
df['Year'] <=40改为df['Year'] <=n。
内容的提问来源于stack exchange,提问作者Nishad V Seeraj
相关产品推荐
相关产品推荐

