Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在多索引数据帧上设置值的更快方法?_Python_Performance_Pandas - Fatal编程技术网

Python 在多索引数据帧上设置值的更快方法?

Python 在多索引数据帧上设置值的更快方法?,python,performance,pandas,Python,Performance,Pandas,我有一个很慢的代码。代码分析清楚地表明,瓶颈是我的Pandas多索引上的.loc 假设我这样初始化它: columns = pd.MultiIndex.from_product([['a','b'], np.arange(10), np.arange(1000)]) index = np.arange(10) df = pd.DataFrame(np.empty((len(index), len(columns.values))), index=index, columns=columns)

我有一个很慢的代码。代码分析清楚地表明,瓶颈是我的Pandas多索引上的.loc

假设我这样初始化它:

columns = pd.MultiIndex.from_product([['a','b'], np.arange(10), np.arange(1000)])
index = np.arange(10)
df = pd.DataFrame(np.empty((len(index), len(columns.values))), index=index, columns=columns)
并且.loc非常慢(使用timeit时为100ms)

我怎样才能使它更快???? 目前,我发现了一个糟糕的解决方案,即使用for循环设置值(需要2毫秒),但我确信有更好的解决方案。 我希望坚持使用多索引数据帧,而不是单索引或Numpy数组

这是一种欺骗,但我建议重新问一个更简单的问题

谢谢, 蒂埃里

编辑 因为它似乎对MaxU感兴趣,下面是我的快速for循环

def mod(df, array):
    k = 0
    for i in [0,1]:
        for j in np.arange(100):
            df.at[4, ('a',i,j)] = array[k]
            k += 1
    return df

%timeit mod(df, np.arange(200))
100 loops, best of 3: 2.1 ms per loop

你确定这不是我们的一部分吗?你打算在循环中使用df.loc[]吗?在for循环中,我可以在单个数据(无切片)上使用df.at更快。在切片设置上,df.at的速度不比df.loc快。我是问您是否在
中调用当前的
df.loc[…切片器..]
解决方案以用于。。。循环
以及是否可以避免……不,我使用.at。我编辑了我的问题。我试图问你是否在循环中调用
mod()
函数?;-)
def mod(df, array):
    k = 0
    for i in [0,1]:
        for j in np.arange(100):
            df.at[4, ('a',i,j)] = array[k]
            k += 1
    return df

%timeit mod(df, np.arange(200))
100 loops, best of 3: 2.1 ms per loop