2014-10-22 7 views
1

У меня есть dataframe, который выглядит любит это:Панды мультииндексного ДФА - нарезка несколько поддиапазонов индекса

Sweep  Index 
Sweep0001 0  -70.434570 
      1  -67.626953 
      2  -68.725586 
      3  -70.556641 
      4  -71.899414 
      5  -69.946289 
      6  -63.964844 
      7  -73.974609 
... 
Sweep0039 79985 -63.964844 
      79986 -66.406250 
      79987 -67.993164 
      79988 -68.237305 
      79989 -66.894531 
      79990 -71.411133 

Я хочу, чтобы нарезать различные диапазоны тралов.

Так, например, я хочу Sweep0001: Sweep0003, Sweep0009: Sweep0015 и т.д.

Я знаю, что могу сделать это в отдельных строках с IX, а именно:

df.ix['Sweep0001':'Sweep0003'] 
df.ix['Sweep0009':'Sweep0015'] 

И затем положить их обратно вместе в один фрейм данных (я делаю это, чтобы успеть усреднить, но мне нужно выбрать некоторые из них и удалить другие).

Есть ли способ сделать этот выбор в одной строке? То есть без необходимости обрезать каждую часть отдельно, а затем объединить все ее в один блок данных.

ответ

0

Использование Панды IndexSlice

import pandas as pd 
idx = pd.IndexSlice 
df.loc[idx[["Sweep0001", "Sweep0002", ..., "Sweep0003", "Sweep0009", ..., "Sweep0015"]] 

Вы можете получить этикетки вы хотите таким образом:

list1 = df.index.get_level_values(0).unique() 
list2 = [x for x in list1] 
list3 = list2[1:4] #For your Sweep0001:Sweep0003 
list3.extend(list2[9:16]) #For you Sweep0009:Sweep0015 
df.loc[idx[list3]] #Note that you need one set of "[]" 
        #less around "list3" as this list comes 
        #by default with its own set of "[]". 

В случае, если вы хотите также нарежьте по столбцам вы можете использовать:

df.loc[idx[list3],:] #Same as above to include all columns. 
df.loc[idx[list3],:"column label"] #Returns data up to that "column label". 

Дополнительная информация о разрезе находится на веб-сайте Pandas (http://pandas.pydata.org/pandas-docs/stable/advanced.html#using-slicers) или в этом же Stackoverflow Q/A: Python Pandas slice multiindex by second level index (or any other level)

Смежные вопросы