如何从python中的多索引数据中获取索引号?

您所在的位置:网站首页 python索引值 如何从python中的多索引数据中获取索引号?

如何从python中的多索引数据中获取索引号?

#如何从python中的多索引数据中获取索引号?| 来源: 网络整理| 查看: 265

dict.values

使用dict跟踪值使最后一个发现值的事项之一。

list(dict(map(reversed, enumerate(df.index.get_level_values(0)))).values()) [2, 4, 5] 随着循环

创建带有因子分解和唯一值数量的函数

def last(bins, k): a = np.zeros(k, np.int64) for i, b in enumerate(bins): a[b] = i return a

然后,您可以使用

f, u = pd.factorize(df.index.get_level_values(0)) last(f, len(u)) array([2, 4, 5])

但是,MultiIndex通常构造方式,labels对象已经是因子分解,levels对象是唯一值。

last(df.index.labels[0], df.index.levels[0].size) array([2, 4, 5])

更重要的是,我们可以使用Numba及时编译来对此进行超级充电。

from numba import njit @njit def nlast(bins, k): a = np.zeros(k, np.int64) for i, b in enumerate(bins): a[b] = i return a nlast(df.index.labels[0], df.index.levels[0].size) array([2, 4, 5]) Timing%%timeit f, u = pd.factorize(df.index.get_level_values(0)) last(f, len(u)) 641 µs ± 9.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) %%timeit f, u = pd.factorize(df.index.get_level_values(0)) nlast(f, len(u)) 264 µs ± 11.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) %%timeit nlast(df.index.labels[0], len(df.index.levels[0])) 4.06 µs ± 43.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) %%timeit last(df.index.labels[0], len(df.index.levels[0])) 654 µs ± 14.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) %%timeit list(dict(map(reversed, enumerate(df.index.get_level_values(0)))).values()) 709 µs ± 4.94 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

jezrael的解决方案。也很快。

%timeit start_stop_arr(df.index.get_level_values(0)) 113 µs ± 83.1 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each) np.unique

我不喜欢它。见下文:

使用np.unique和return_index论证。这将返回找到每个唯一值的第一个位置。在此之后,我会做一些转移以获得先前唯一值的最后位置。

注意:如果级别值位于连续组中,则此方法有效。如果不是,我们必须进行排序和分类,这是不值得的。除非确实如此,否则我将展示如何做到这一点。

i = np.unique(df.index.get_level_values(0), return_index=True)[1] np.append(i[1:], len(df)) - 1 array([2, 4, 5]) 建立

来自@jezrael

df = pd.DataFrame({'A':list('abcdef'), 'B':[4,5,4,5,5,4], 'C':[7,8,9,4,2,3], 'D':[1,3,5,7,1,0], 'E':[5,3,6,9,2,4], 'F':list('aaabbc')}).set_index(['F','A','B'])


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3