IIUC, вы можете использовать Pandas apply
и обновлять каждую строку, основываясь на ее year_out
значении:
def updater(row):
for col in row.index:
try:
if int(col) >= row['year_out']:
row[col] = 0
except ValueError:
pass
return row
df.apply(updater, axis=1)
Plan 2010 2020 2030 2040 2050 year_out
0 Australia 500 0 0 0 0 2020
1 Australia 400 400 0 0 0 2030
2 New Zealand 300 300 300 0 0 2040
3 New Zealand 200 200 200 200 0 2050
С примерами данных:
data = {'Plan': {0: 'Australia', 1: 'Australia', 2: 'New Zealand', 3: 'New Zealand'},
'2010': {0: 500, 1: 400, 2: 300, 3: 200},
'2020': {0: 500, 1: 400, 2: 300, 3: 200},
'2030': {0: 500, 1: 400, 2: 300, 3: 200},
'2040': {0: 500, 1: 400, 2: 300, 3: 200},
'2050': {0: 500, 1: 400, 2: 300, 3: 200},
'year_out': {0: 2020, 1: 2030, 2: 2040, 3: 2050}}
df = pd.DataFrame(data)
df
Plan 2010 2020 2030 2040 2050 year_out
0 Australia 500 500 500 500 500 2020
1 Australia 400 400 400 400 400 2030
2 New Zealand 300 300 300 300 300 2040
3 New Zealand 200 200 200 200 200 2050
Примечание: ваш ожидаемыйВыходные данные чередуются между установкой столбцов в ноль, когда они либо >=
против >
, чем year_out
.Я предполагаю, что это ошибка, и я установил непротиворечивое правило в этом ответе (легко изменить в случае необходимости).