gpt4 book ai didi

python - Pandas:每行中最大 3 列值的总和

转载 作者:太空狗 更新时间:2023-10-30 00:37:44 27 4
gpt4 key购买 nike

示例数据:

        0        1         2        3       4  Sum_max_3
0 591949 2575703 22479693 2202865 499835 27258261
1 2705 11426 339913 5438 1016 356777
2 18 119 4162 18 0 4299
3 264 1213 14999 246 116 16476
4 0 35 1292 10 0 1337
5 0 0 1442 0 0 1442
6 0 28 5596 20 0 5644
7 0 10 102 56 0 168
8 33 0 1224 17 0 1274
9 39 198 9505 62 35 9765

我想获得该行中具有最大值的 3 列的总和。这些是每一行的不同列 (Sum_max_3)。

我有很多列,所以我需要为所有列自动执行此操作。

最佳答案

你应该使用 numpy.partition避免完全排序。这将减少从 O(nlogn)O(n) 中找到三个最大值的时间复杂度,这将在大型 DataFrame 上产生巨大差异:

np.sum(np.partition(df.values, -3)[:, -3:], 1)

df.assign(max3=np.sum(np.partition(df.values, -3)[:, -3:], 1))

        0        1         2        3       4      max3
0 591949 2575703 22479693 2202865 499835 27258261
1 2705 11426 339913 5438 1016 356777
2 18 119 4162 18 0 4299
3 264 1213 14999 246 116 16476
4 0 35 1292 10 0 1337
5 0 0 1442 0 0 1442
6 0 28 5596 20 0 5644
7 0 10 102 56 0 168
8 33 0 1224 17 0 1274
9 39 198 9505 62 35 9765

时间

In [411]: df = pd.DataFrame(np.random.rand(5000, 5000))

In [412]: %timeit np.sum(np.sort(df.values)[:,-3:],axis=1)
1.69 s ± 92.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [413]: %timeit np.sum(np.partition(df.values, -3)[:, -3:], 1)
364 ms ± 23.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

关于python - Pandas:每行中最大 3 列值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52358248/

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