如果您重新考虑输入的方式,这里有一个简单的方法。按原样存储各个标签,然后制作切片元组。一个简单的辅助函数将其解析为元组之间的所有标签。
这里没有对要切片的范围进行硬编码,一切都基于您最初提供的标签。
样本数据
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.normal(0, 1, (1, 10)),
columns = ['c1', 'c3', 'c4', 'foo', 'bar', 'c5', 'c6',
'c7', 'c8', 'c9'])
my_slice = ['c1', ('c4', 'c7')]
def create_labels(columns, my_slice):
"""
columns: pd.Index
my_slice: list of labels, or tuple if slice
"""
labels = []
for x in my_slice:
if isinstance(x, tuple):
labels.extend(columns[columns.get_loc(x[0]):
columns.get_loc(x[1])+1])
else:
labels.append(x)
return labels
create_labels(df.columns, my_slice)
#['c1', 'c4', 'foo', 'bar', 'c5', 'c6', 'c7']