Я думаю, что @ anky использует np.r_ - правильный путь к go и довольно гибкий, этот ответ является просто альтернативой, используя pandas встроенный метод индекса:
NB: я использую пример данных @ anky:
df = pd.DataFrame(columns=list('ab') +
[*map(str,pd.date_range('2000','2021',freq='y').year)])
используйте slice_indexer , чтобы получить местоположения срезов заинтересованных значений:
A = df.columns.slice_indexer('2005','2010')
A
slice(7, 13, None)
#if one entry is included, it includes the location of the last index
B = df.columns.slice_indexer('2015')
B
slice(17, 23, None)
добавить ilo c индексирование как A, так и B:
res = df.iloc[:,A] + df.iloc[:,B]
res
Index(['2005', '2006', '2007', '2008', '2009', '2010', '2015', '2016', '2017',
'2018', '2019', '2020'],
dtype='object')
также обратите внимание, что метод @ anky будет более эффективным, поскольку ilo c вызывается только один раз. опять же, это просто игра с доступными методами
, конечно, вы можете комбинировать np.r_ с кусочками из A и B:
res = df.iloc[:,np.r_[A,B]]
res.columns
Index(['2005', '2006', '2007', '2008', '2009', '2010', '2015', '2016', '2017',
'2018', '2019', '2020'],
dtype='object')