gpt4 book ai didi

python - Pandas:需要一种更快的索引切片方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:17 24 4
gpt4 key购买 nike

有人愿意尝试加速这个数据帧索引切片方案吗?我正在尝试对一些巨大的数据帧进行切片和切 block ,因此每一位都很重要。除了以下技术之外,我需要以某种方式找到一种更快的索引切片数据帧的方法:

v = initFrame.xs(x,level=('ifoo2','ifoo3'), drop_level=False) 

此外,pd.unique 中的循环对性能的影响非常显着。

uniqueList = list(pd.unique(initFrame[['bar1','bar4']].values))

复制并粘贴以下代码段以避免安装。

import pandas as pd

foo1 = (['LABEL1','LABEL1','LABEL2','LABEL2'])
foo2 = ([5,5,6,6])
foo3 = ([1,1,2,3])

index = pd.MultiIndex.from_arrays([foo1,foo2,foo3], names=['ifoo1','ifoo2','ifoo3'])

initFrame = pd.DataFrame({'bar1': [ 5,6,5,6],
'bar2': ['a','b','c','d'],
'bar3': [11,22,33,44],
'bar4': [1,2,1,3]}, index=index)

finDict = {}
#start timer1
uniqueList = list(pd.unique(initFrame[['bar1','bar4']].values))
#end timer1
for x in uniqueList:
#start timer2
v = initFrame.xs(x,level=('ifoo2','ifoo3'), drop_level=False)
#stop timer2
k = int(x[0]), int(x[1])
finDict.update({k:v})

更新2016-04-04

对于那些感兴趣的人,我最终使用了以下内容:

finDict = {}
grouper = initFrame.groupby(level=('ifoo2', 'ifoo3'))
for name, group in grouper:
finDict.update({name:group})

最佳答案

您可以将字典理解与 loc 一起使用来进行数据帧索引:

finDict = {pair: df.loc[pd.IndexSlice[:, pair[0], pair[1]], :] 
for pair in pd.unique(initFrame[['bar1', 'bar4']].values).tolist()}

>>> finDict
{(5, 1): bar1 bar2 bar3 bar4
ifoo1 ifoo2 ifoo3
LABEL1 5 1 5 a 11 1
1 6 b 22 2,
(6, 2): bar1 bar2 bar3 bar4
ifoo1 ifoo2 ifoo3
LABEL2 6 2 5 c 33 1,
(6, 3): bar1 bar2 bar3 bar4
ifoo1 ifoo2 ifoo3
LABEL2 6 3 6 d 44 3}

关于python - Pandas:需要一种更快的索引切片方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36366939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com