我有一个多层级的数据框 df
:
>>> df
sales cash
STK_ID RPT_Date
000568 20120630 51.926 42.845
20120930 80.093 57.488
000596 20120630 22.278 18.247
20120930 32.585 26.177
000799 20120630 9.291 6.513
20120930 14.784 8.157
我想要获取子级索引'STK_ID'
的值列表,它将返回一个列表['000568','000596','000799']
。
是否有直接的函数来实现这个(不使用reset_index
和获取列值)?
df.index.get_level_values('STK_ID').unique() == df.index.levels[0]
,但是levels存储的就是原样,所以访问速度应该更快 :) - Andy Haydendf.index.levels[df.index.names.index(level_name)]
每个循环花费6.69微秒,而df.index.get_level_values(level_name).unique()
每个循环花费128毫秒。因此,直接获取索引级别对于我的情况来说比后者快了超过19000倍。(我假设我的DataFrame有约500万行,在unique()
方法中解析它需要时间) - flutefreak7df.index.get_level_values(level_name)
必须从级别构建,然后应用唯一性,因此它至少是O(2n)
,与IIUC O(1)相比。 - Andy Hayden