【问题标题】:How do I reset a MultiIndex after slicing [duplicate]切片后如何重置 MultiIndex [重复]
【发布时间】:2016-10-15 17:25:39
【问题描述】:

我经常将数据框特定级别的值作为我应该做什么的指南。在这种情况下,我使用pd.IndexSlice 对数据框进行切片并引用生成的数据框的索引。问题是生成的数据帧的索引与原始索引相同。我需要它是原始索引的子集,它尊重我制作的切片。

设置

import pandas as pd

def produce_df(rows, columns, row_names=None, column_names=None):
    """rows is a list of lists that will be used to build a MultiIndex
    columns is a list of lists that will be used to build a MultiIndex"""
    row_index = pd.MultiIndex.from_product(rows, names=row_names)
    col_index = pd.MultiIndex.from_product(columns, names=column_names)
    return pd.DataFrame(index=row_index, columns=col_index)

df = produce_df([['a', 'b'], ['c', 'd']], [['1', '2'], ['3', '4']],
                row_names=['alpha1', 'alpha2'], column_names=['number1', 'number2'])

print df

number1          1         2     
number2          3    4    3    4
alpha1 alpha2                    
a      c       NaN  NaN  NaN  NaN
       d       NaN  NaN  NaN  NaN
b      c       NaN  NaN  NaN  NaN
       d       NaN  NaN  NaN  NaN

索引如下:

print df.index

MultiIndex(levels=[[u'a', u'b'], [u'c', u'd']],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
           names=[u'alpha1', u'alpha2'])

然后我切片:

islc = pd.IndexSlice[['a'], :]
df2 = df.loc[islc, :]
print df2

number1          1         2     
number2          3    4    3    4
alpha1 alpha2                    
a      c       NaN  NaN  NaN  NaN
       d       NaN  NaN  NaN  NaN

这是预期的切片。索引是什么样的:

MultiIndex(levels=[[u'a', u'b'], [u'c', u'd']],
           labels=[[0, 0], [0, 1]],
           names=[u'alpha1', u'alpha2'])

df.index.levels[0] 里面还有'b'

问题:如何在切片后重置MultiIndex

【问题讨论】:

    标签: python pandas slice multi-index


    【解决方案1】:

    这可行,但很笨拙。我觉得这应该是我不在寻找的地方的一个选择。

    df2.index = pd.MultiIndex.from_tuples(df2.index.to_series().values, names=df.index.names)
    
    print df2
    
    number1          1         2     
    number2          3    4    3    4
    alpha1 alpha2                    
    a      c       NaN  NaN  NaN  NaN
           d       NaN  NaN  NaN  NaN
    
    print df2.index
    
    MultiIndex(levels=[[u'a'], [u'c', u'd']],
               labels=[[0, 0], [0, 1]],
               names=[u'alpha1', u'alpha2'])
    

    'b' 已从 df2.index.levels[0] 消失

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 2023-04-01
      • 2017-05-08
      • 2021-07-05
      • 1970-01-01
      • 2021-07-30
      • 2020-09-10
      • 2013-04-28
      相关资源
      最近更新 更多