【问题标题】:python pandas multiIndex Dataframe, how to select one level based on ilocpython pandas multiIndex Dataframe,如何根据iloc选择一级
【发布时间】:2018-05-31 06:43:15
【问题描述】:
df = pd.DataFrame(np.random.rand(100, 2),
    columns=pd.Index(['A', 'B'], name='bar'),
    index=pd.date_range('20160101',
periods=100, freq='D', name='foo'))

corr = df.rolling(12).corr()

在旧版本中,这会返回一个面板,因此现有代码使用

corr[0,:,:]

返回第一个日期的 corr 矩阵。

但是,在新版本中,corr 是一个 multiIndex DataFrame,上面的代码失败了。如何以最小的变化实现相同的输出?

corr.iloc[0] # only returns first row
corr.iloc[0,:,:] # error

编辑:

所需的输出是获得与下面相同的返回,但不要使用带有值的.loc,而是使用类似.iloc[11](即对应于日期中第12个值的相关矩阵)

corr.loc['2016-01-12']

bar                    A         B
foo        bar                    
2016-01-12 A    1.000000 -0.115059
           B   -0.115059  1.000000

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这是你想要的吗?

    In [236]: x = corr.dropna()
    
    In [237]: x.loc[pd.IndexSlice[x.index[0][0], :], :]
    Out[237]:
    bar                    A         B
    foo        bar
    2016-01-12 A    1.000000  0.158424
               B    0.158424  1.000000
    

    【讨论】:

      【解决方案2】:

      @MaxU 提到的问题是.iloc 不是“MultiIndex-aware”——请参阅here 进行讨论。

      您的情况的替代解决方案:

      dates = corr.index.get_level_values(0).drop_duplicates()
      corr.loc[dates[12]]  # correl. matrix for 12th date (0-indexed)
      

      保留为 DataFrame:

      corr.loc[[dates[12]]]
      

      【讨论】:

        猜你喜欢
        • 2019-05-06
        • 2019-05-24
        • 1970-01-01
        • 2019-01-26
        • 2020-05-26
        • 2019-12-02
        相关资源
        最近更新 更多