python - 获取多索引数据帧第二层的名称

标签 python pandas

我有一个MultiIndex DataFrame,格式为:

df
                0         1         2         3
Open  1  1.046031 -1.653869  1.039417  0.029429
      2  0.149056 -1.572694  0.562478 -0.974489
Close 1 -0.475074 -0.052126 -2.124979 -1.918538
      1  0.862663  0.405697  0.455616 -0.542472

我可以使用类似的方法获取第一级数据:

df2 = df.xs('Open', level=0, drop_level=False)

               0         1         2         3
Open 1  1.046031 -1.653869  1.039417  0.029429
     2  0.149056 -1.572694  0.562478 -0.974489
例如。有没有办法从上面裁剪的数据帧(df2)中获取第二级的名称(即12等)或者应该我事先就知道他们可以这样称呼:

df2.loc[idx['Open', '1'], :]

为了说清楚,我知道 0 级名称('Open''Close'),但忽略第二级。有没有办法获取它们以便在上面的语法中使用它们?

最佳答案

我认为需要MultiIndex.remove_unused_levels首先获取 level 的值:

print (df2.index.remove_unused_levels().levels[1])
Int64Index([1, 2], dtype='int64')

或者:

print (df2.index.remove_unused_levels().get_level_values(1))
Int64Index([1, 2], dtype='int64')

如果选择第二个关闭级别,可以更好地看到差异:

df22 = df.xs('Close', level=0, drop_level=False)
print (df22)
                0         1         2         3
Close 1 -0.475074 -0.052126 -2.124979 -1.918538
      1  0.862663  0.405697  0.455616 -0.542472

#get default index values - not what need
print (list(df22.index.levels[1]))
[1, 2]

#get unique values without all levels
print (df22.index.remove_unused_levels().levels[1])
Int64Index([1], dtype='int64')

#get values if index
print (df22.index.remove_unused_levels().get_level_values(1))
Int64Index([1, 1], dtype='int64')

关于python - 获取多索引数据帧第二层的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50327625/

相关文章:

python - 在 Python 3 Pythonic 中使用 map(...) (与循环相比)

基于 date_time 索引值的 Python/pandas 条件语句

python - 根据数据框中另一列的值创建新列

Pandas 以百分比变化重新采样

python - 安装基于 pyproject.toml 的项目所需的错误 : Could not build wheels for pyaudio,

python - 在 Django 中保存 ModelForm 后获取主键

python - 测试 Django 通用 View

python - 在 Python 3 中安装 Ephem 包

Python 在 pandas csv reader 中解压缩 gzip csv

python-3.x - 索引错误: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match)