我有一个这样的Multiindex数据框:
import pandas as pd
import numpy as np
lat = [10.1,16.5,35.8,40.6,80.7,60.1]
long = [11.3,19.4,33.6,43.8,65.2,60.1]
years = list(range(2000,2010,1))
months = list(range(1,13,1))
variables = ['S','L','A','W']
miindex = pd.MultiIndex.from_product([zip(lat,long),years, months])
micolumns = pd.MultiIndex.from_tuples(variables)
dfmi = pd.DataFrame(np.arange(len(miindex) * len(micolumns)).reshape((len(miindex),\
len(micolumns))),index=miindex, \
columns=micolumns). \
sort_index().sort_index(axis=0)
#In [10]: dfmi
#Out[10]:
# S L A W
#(10.1, 11.3) 2000 1 0 1 2 3
# 2 4 5 6 7
# 3 8 9 10 11
# 4 12 13 14 15
# 5 16 17 18 19
# 6 20 21 22 23
# 7 24 25 26 27
# 8 28 29 30 31
# 9 32 33 34 35
# 10 36 37 38 39
# 11 40 41 42 43
# 12 44 45 46 47
# 2001 1 48 49 50 51
# 2 52 53 54 55
# 3 56 57 58 59
我能够根据这样的年份或月份对数据集进行切片
summer_data = dfmi.loc[(slice(None),slice(None),slice(6,8)),:]
#In[11]: summer_data
#Out[11]:
# S L A W
#(10.1, 11.3) 2000 6 20 21 22 23
# 7 24 25 26 27
# 8 28 29 30 31
# 2001 6 68 69 70 71
# 7 72 73 74 75
# 8 76 77 78 79
# 2002 6 116 117 118 119
# 7 120 121 122 123
我想根据纬度值(例如大于30)对数据集进行切片。我从pandas MultiIndex / Advanced Indexing文档中查阅过,但没有发现任何有用的信息。无论如何,我可以这样做吗? / p>
答案 0 :(得分:0)
一般来说,在多索引中使用tupel并不是一个好主意。多索引本身就是一个元组,您会遇到麻烦。但是,为什么要结合使用lat
和long
?如果您使用
miindex = pd.MultiIndex.from_product([lat,long,years, months], names=['lat', 'long', 'year', 'month'])
您可以这样写:
dfmi.loc[(slice(30, None), slice(None), slice(None), slice(None)), :]
或
dfmi.query("lat > 30")
Here,您可以找到有关切片多索引的非常好的概述。