【问题标题】:How to find the max sum of a column in a dataframe regarding a condition of another column's value?如何在数据框中找到关于另一列值条件的列的最大总和?
【发布时间】:2021-02-11 07:51:45
【问题描述】:

如何在数据框中找到关于另一列值条件的列的最大总和?

例如,我有一个排序的数据框(考虑使用 Python 的熊猫数据框):

数据框截图:enter image description here

import pandas as pd
df=pd.DataFrame({'Activity Name':['A','B','C','D','E','F'],
            'Time':[10,25,10,10,90,80],
            'Gain':[30,100,40,40,450,400],
            'Gain/min':[3,4,4,4,5,5]})

“名称”列是我可以参与的活动名称。 “时间”列是相应活动消耗的时间。 “增益”栏是我完成活动后将获得的总增益。 “Gain/min”列是我可以通过活动每分钟获得的收益。

我只有 120 分钟(比方说时间的分钟)来参加这些活动,而且每个活动我只能参加一次。我不一定要填满所有的 120 分钟,但我只有在完成活动后才能获得收益。因此,如果我可以选择的最后一项活动具有相同的“每分钟收益”率,我应该参加时间更长的活动,以便在 120 分钟内获得更高的总收益(如果我在最后 5 分钟休息,那么这 5 分钟是空白和浪费,我不会在这 5 分钟内获得任何收益)

时间总和小于等于 120,我想在这 120 分钟内最大化我的收益。

谁能帮我输出这120分钟内我应该参加的活动计划吗?

首先参加哪个活动或其次参加哪个活动都没有关系。只是列出我应该参加的所有活动以最大化我的收益。

如果有多个计划可以给出最大收益并且它们的总收益相同,请将它们全部打印出来(类似于组合和排列问题)。

将其视为使用 Python 的 Pandas 数据框。

提前谢谢你!!!

【问题讨论】:

标签: python python-3.x pandas dataframe data-science


【解决方案1】:

可能不是最好的方法,但这就是我解决问题的方法(如果我理解正确的话)。将活动名称设置为索引并导入“组合”。 (如果您被允许重复活动,只需将其替换为“combinations_with_replacement”)。同时创建一个字典来存储结果。

import pandas as pd
from itertools import combinations

df=pd.DataFrame({'Activity Name':['A','B','C','D','E','F'],
            'Time':[10,25,10,10,90,80],
            'Gain':[30,100,40,40,450,400],
            'Gain/min':[3,4,4,4,5,5]})

df.set_index('Activity Name', inplace=True)
possibilities = {}

您肯定不会做超过 12 项活动,因为最短的活动需要 10 分钟。因此,我们假设您将进行 1 到 12 个活动。 我们将使用组合函数来查找所有可能的活动组合。 我们将每 120 分钟或更少的尝试称为“开始”。 我们将使用列表推导的总和来找到每个“go”花费的时间并将其分配给“t”。 那么如果 't' 小于或等于 120: 我们使用另一个列表推导的总和来计算该“go”的分数并将其添加到我们的字典中。

for i in range(1,12):
    for go in combinations(df.index, i):
        t = sum([df.at[v,'Time'] for v in go])
        if t <= 120:
            score = sum([df.at[v, 'Gain'] for v in go])
            possibilities[go] = score

然后在我们字典的所有分数中找到最高分,并将其存储在变量'best'中。

best = max(possibilities.values())

然后遍历字典并删除所有分数低于最佳的条目。

for key, value in list(possibilities.items()):
    if value < best:
        del possibilities[key]

可能性字典现在应该只包含得分最高的尝试,以完成的活动作为键,“增益”的总和作为值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多