#python #pandas #dataframe #dictionary
#python #pandas #фрейм данных #словарь
Вопрос:
У меня есть фрейм данных pandas, подобный этому
YEAR_OPENED 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
1999 1 0 0 0 1 0 0 0 1 0
2000 1 1 2 0 3 0 0 0 0 0
2001 0 0 0 4 0 0 0 0 0 0
Я хочу добавить все значения в заданные столбцы следующим образом:
YEAR_OPENED CLOSED_IN_5_YEARS
1999 2
2000 7
2001 4
Итак, в основном я хочу проверить, попадают ли имена столбцов в пятилетний диапазон соответствующих значений в столбце ‘YEAR_OPENED’ и создать новый столбец с суммой всех значений. Как мне поступить?
Ответ №1:
df['CLOSED_IN_5_YEARS'] = df.set_index('YEAR_OPENED').apply(
lambda x: sum(i for i, c in zip(x, x.index) if x.name <= int(c) <= x.name 5), axis=1
).values
print(df)
С принтами:
YEAR_OPENED 2000 2001 2002 ... 2007 2008 2009 CLOSED_IN_5_YEARS
0 1999 1 0 0 ... 0 1 0 2
1 2000 1 1 2 ... 0 0 0 7
2 2001 0 0 0 ... 0 0 0 4
Ответ №2:
Используется iloc
для выбора конкретных столбцов на основе переменной n
и concat
с первым столбцом:
n=5
df['CLOSED_IN_5_YEARS'] = df.iloc[:,1:n 1].sum(axis=1)
df=pd.concat([df.iloc[:,0],df.iloc[:,-1]], axis=1)
df
Out[1]:
YEAR_OPENED CLOSED_IN_5_YEARS
0 1999 2
1 2000 7
2 2001 4