我的代码很慢。代码分析显示我的Pandas MultiIndex明显地存在瓶颈.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非常慢(100ms有时间)
%timeit df.loc[5,('a',[0,1],np.arange(100))] = np.arange(200)
10 loops, best of 3: 100 ms per loop
如何让它更快? 目前我发现了一个糟糕的解决方案,包括使用for循环设置值(需要2毫秒),但我确信有更好的解决方案。 我想坚持使用Pandas MultiIndex DataFrames,而不是单个索引或Numpy数组。
这是Why Pandas .loc speed in Pandas depends on DataFrame initialization? How to make MultiIndex .loc as fast as possible?的一种欺骗,但我建议重新提出一个更简单的问题。
谢谢, 亨利
因为它似乎对MaxU感兴趣,所以这是我的循环更快
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