对于具有更好性能的多索引数据帧df.loc vs df.xs

2024-10-06 15:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个多索引数据帧示例:

days = ['Day 1', 'Day 1', 'Day 1', 'Day 2', 'Day 2', 'Day 2']
meals = [1,2,3,1,2,3]
hier_index = pd.MultiIndex.from_tuples(list(zip(days, meals)))
arr_5 = np.random.randint(500, 700, size=(6, 2))
df = pd.DataFrame(arr_5, hier_index, ['M', 'F'])
print(df)

输出:

           M    F
Day 1 1  519  582
      2  686  613
      3  535  537
Day 2 1  516  602
      2  607  522
      3  662  637

使用loc

df.loc['Day 1']

使用xs

df.xs('Day 1')

什么有更好的性能


我知道以前有人问过这个问题,但7年来一直没有得到答案Other Stack overflow question


Tags: 数据from示例dfindexdayslocpd
1条回答
网友
1楼 · 发布于 2024-10-06 15:30:03

让我们看一些具体数据的标杆结果进行比较:

%%timeit
df.loc['Day 1']

152 µs ± 4.33 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%%timeit
df.xs('Day 1')

142 µs ± 3.48 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

.locvs.xs152µsvs142µs
对于6行数据集,.xs大约快7%


让我们比较原始大小的10000x数据大小:

df2 = pd.concat([df] * 10000)
%%timeit
df2.loc['Day 1']

1.43 ms ± 55.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df2.xs('Day 1')

1.37 ms ± 27.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

.locvs.xs1.43毫秒vs1.37毫秒
对于60000行的数据集,.xs大约快4.3%

结论

基于一个非常简单的基准测试结果,粗略的结论是,它们的性能大小大致相同。用.xs稍微快一点(几%的差异)

相关问题 更多 >