最好的性能是转换为numpy数组字典而不是列表字典,并使用系列的np.array构造字典。
此外,如果您真的需要列表字典,在s.index 和np.array.tolist() 上使用dict 和zip 仍然比上述两种方法好得多。上述两种方法都有创建数据帧的开销。
设置:一系列 20k 数字
s = pd.Series(np.arange(20000))
在 1000 系列上创建 np.array 的字典
dict(zip(s.index, np.column_stack([s.values]*1000)))
在 1000 系列上创建 list 的字典
dict(zip(s.index, np.column_stack([s.values]*1000).tolist()))
计时所有 4 种方法:
In [1071]: %timeit dict(zip(s.index, np.column_stack([s.values]*1000)))
195 ms ± 879 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [1072]: %timeit dict(zip(s.index, np.column_stack([s.values]*1000).tolist()))
1.05 s ± 4.26 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [1075]: %timeit pd.concat([s]*1000).groupby(level=0).apply(list).to_dict()
7.01 s ± 70.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [1077]: %timeit pd.concat([s]*1000, axis=1).T.to_dict('l')
2.83 s ± 11.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
使用带有dict 和zip 的系列数组numpy 比使用pd.concat 的两种方法快得多。 np.array 的字典在 195 ms 处最快,比下一个快 5 倍以上。