【问题标题】:Slicing Multiindex Data Frame with zip values as index使用 zip 值作为索引对多索引数据帧进行切片
【发布时间】:2019-02-18 22:10:19
【问题描述】:

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

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 文档,但没有发现任何有用的东西。无论如何我可以这样做吗?

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    总的来说,在多索引中使用元组并不是一个好主意。多重索引本身就是一个元组,你会遇到麻烦。但是为什么要结合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 你可以找到关于切片多索引的非常好的概述。

    【讨论】:

    • 通过这样做,它会创建考虑 lat long 作为两个不同索引级别的数据框,但我想将这两个索引级别视为相同的索引级别。
    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 2014-05-02
    • 2019-11-14
    • 2018-03-12
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多