Pandas 最多聚合两列

Skh*_*haz 1 python optimization aggregate knapsack-problem pandas

我有一个包含两列的数据框

df = DataFrame.from_records([
  {"time": 10, "amount": 200},
  {"time": 70, "amount": 1000},
  {"time": 10, "amount": 300},
  {"time": 10, "amount": 100},
])
Run Code Online (Sandbox Code Playgroud)

我想要,给定一段时间80ms,计算可能的最大数量,在这种情况下,输出应该是 1300,因为在此期间,可能的最大数量是 1300。

熊猫可以吗?我想过使用聚合,但我不知道如何使用它

moz*_*way 5

这是一个背包问题,你可以用专用库来解决它(例如knapsack):

from knapsack import knapsack
total, idx = knapsack(df['time'], df['amount']).solve(80)

df.out = df.iloc[idx]
Run Code Online (Sandbox Code Playgroud)

输出:

   time  amount
1    70    1000
2    10     300
Run Code Online (Sandbox Code Playgroud)

其他例子:

# with max = 75
   time  amount
1    70    1000

# with max = 40
   time  amount
0    10     200
2    10     300
3    10     100
Run Code Online (Sandbox Code Playgroud)