如何在此数据帧中找到5个值的最大和,但不能在同一行或列中找到任何值?

2024-06-01 03:17:21 发布

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

[[-9.92, 23.04, -6.06, -0.72, 21.32],

 [54.98, 15.58, 51.66, 54.1, 43.76],

 [49.22, 5.68, 25.24, 31.8, 43.3],

 [32.1, 15.12, 9.38, 28.96, 40.14],

 [13.2, 10.36, 12.44, -12.02, 15.8]]

我有一个使用此数据结构的熊猫数据帧。我希望在数据框中找到5个值的最大和,但这些值不能在同一列或同一行中。例如,[9.92, 15.58, 25.24, 28.96, 15.8]的值是允许的,但是[9.92, 15.58, 25.24, 28.96, 40.14]&[9.92, 15.58, 25.24, 28.96, -12.02]将不会

理想情况下,我希望从这个数据框架生成一个符合我标准的列表列表,然后从中找到最大值

[{'Stephen Curry': -9.92,
  'Buddy Hield': 23.04,
  'Duncan Robinson': -6.06,
  'Damian Lillard': -0.72,
  'Joe Harris': 21.32},
 {'Stephen Curry': 54.98,
  'Buddy Hield': 15.58,
  'Duncan Robinson': 51.66,
  'Damian Lillard': 54.1,
  'Joe Harris': 43.76},
 {'Stephen Curry': 49.22,
  'Buddy Hield': 5.68,
  'Duncan Robinson': 25.24,
  'Damian Lillard': 31.8,
  'Joe Harris': 43.3},
 {'Stephen Curry': 32.1,
  'Buddy Hield': 15.12,
  'Duncan Robinson': 9.38,
  'Damian Lillard': 28.96,
  'Joe Harris': 40.14},
 {'Stephen Curry': 13.2,
  'Buddy Hield': 10.36,
  'Duncan Robinson': 12.44,
  'Damian Lillard': -12.02,
  'Joe Harris': 15.8}]

Tags: 数据数据结构列表ampjoeharrisstephenbuddy
1条回答
网友
1楼 · 发布于 2024-06-01 03:17:21

这基本上就是Assignment Problem。这个特殊的实例小到足以使用暴力

from itertools import permutations
import numpy as np

arr = np.array(
    [[-9.92, 23.04, -6.06, -0.72, 21.32],
     [54.98, 15.58, 51.66, 54.1, 43.76],
     [49.22, 5.68, 25.24, 31.8, 43.3],
     [32.1, 15.12, 9.38, 28.96, 40.14],
     [13.2, 10.36, 12.44, -12.02, 15.8]]
)

best_perm = None
best_sum = -np.inf
for perm in permutations(range(5)):
    s = sum([arr[perm[i],i] for i in range(5)])
    if s > best_sum:
        best_sum = s
        best_perm = perm

结果

best_sum=178.94

best_perm=(2,0,4,1,3)

这意味着最佳解决方案是通过选择第1列的第3行、第2列的第1行、第3列的第5行、第4列的第2行和第5列的第4行

将问题推广到大量的列和行可能很难,在这种情况下,您可以尝试integer programming with PuLP

相关问题 更多 >