Pandas multiindex:获取没有重复的级别值

时间:2018-06-08 17:47:20

标签: python pandas dataframe indexing multi-index

所以我确定这非常简单,但我对python / pandas很陌生。

我希望将我的Multiindex的某个列(我的测量名称)作为一个列表,以便稍后在for循环中使用它来命名和保存我的图。我非常有信心从我的数据框中获取所需的数据,但我无法弄清楚如何从索引中获取某些列。

所以实际上在写这个问题的时候,我有点想出答案,但它看起来仍然很笨拙。必须有一个直接的命令来做到这一点。 那将是我的代码:

a = df.index.get_level_values('File')
a = a.drop_duplicates()
a = a.values

1 个答案:

答案 0 :(得分:0)

index.levels

您可以直接访问MultiIndex每个级别的唯一元素:

df = pd.DataFrame([['A', 'W', 1], ['B', 'X', 2], ['C', 'Y', 3],
                   ['D', 'X', 4], ['E', 'Y', 5]])
df = df.set_index([0, 1])

a = df.index.levels[1]

print(a)
Index(['W', 'X', 'Y'], dtype='object', name=1)

要了解可用信息,请参阅内部存储Index对象的方式:

print(df.index)

MultiIndex(levels=[['A', 'B', 'C', 'D', 'E'], ['W', 'X', 'Y']],
           labels=[[0, 1, 2, 3, 4], [0, 1, 2, 1, 2]],
           names=[0, 1])

但是,以下方法更直观,文档更好。

值得注意的一点是,您不必通过values属性显式提取NumPy数组。您可以直接迭代Index个对象。此外,Pandas可以鼓励方法链接。

drop_duplicates / unique

返回Index个对象,并保留订单。

a = df.index.get_level_values(1).drop_duplicates()
# equivalently, df.index.get_level_values(1).unique()

print(a)
Index(['W', 'X', 'Y'], dtype='object', name=1)

设置

返回set。对于O(1)查找很有用,但结果是无序的。

a = set(df.index.get_level_values(1))

print(a)
{'X', 'Y', 'W'}