Вот решение. У вас есть следующий фрейм данных:
df = pd.DataFrame({'birthYR': [1981,1981,1983,1982],
'crime2006': [0,1,0,0],
'crime2008': [1,1,1,0],
'crime2010':[1,1,1,1]})
df
birthYR crime2006 crime2008 crime2010 crimeby25
1981 0 1 1 0
1981 1 1 1 1
1983 0 1 1 1
1982 0 0 1 0
Давайте сначала определим список лет, которые мы изучаем:
years = [2006,2008,2010]
Мы создаем несколько промежуточных полезных столбцов
for year in years :
# Compute the age at a given year
df["AgeIn"+str(year)] = year - df["birthYR"]
# Is he/she more than 25 at a given year
df["NotMoreThan25In"+str(year)] = df["AgeIn"+str(year)]<=25
# Let's remove age column for clarity
df = df.drop("AgeIn"+str(year),axis=1)
# Check if he/she commited crime and was not more than 25 at a given year
df["NotMoreThan25In"+str(year)+"AndCrime"] = df["NotMoreThan25In"+str(year)]*df["crime"+str(year)]
В конце мы просто суммируем общее количество за каждый год, чтобы увидеть, совершил ли он / она преступление, к 25:
df["crimeby25"] = df[["Not25In"+str(year)+"AndCrime" for year in years]].max(axis=1)
df["crimeby25"]
0 0
1 1
2 1
3 0