以zip值为索引的多索引数据帧切片

2024-06-23 19:43:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个多索引数据帧:

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)对这个数据集进行切片。我浏览了熊猫多索引/高级索引文档,但没有发现任何东西有帮助。是吗我有什么办法可以做到这一点?你知道吗


Tags: 数据importindexlenasnpslicelong
1条回答
网友
1楼 · 发布于 2024-06-23 19:43:26

一般来说,在多索引中使用元组并不是一个好主意。多重索引本身就是一个元组,您将遇到麻烦。但是为什么要把latlong结合起来呢?如果你使用

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您可以找到一个非常好的关于切片多索引的概述。你知道吗

相关问题 更多 >

    热门问题