如何根据另一列值的条件查找数据帧中一列的最大和?

2024-05-15 06:46:53 发布

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

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

例如,我有一个已排序的数据帧(考虑使用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]})

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

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

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

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

首先参加哪项活动或第二次参加哪项活动并不重要。只是列出所有我应该参加的活动,以最大限度地提高我的收益

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

将其视为使用Python的大熊猫数据帧。

提前谢谢你


Tags: 数据image名称here屏幕排序时间增益
1条回答
网友
1楼 · 发布于 2024-05-15 06:46:53

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

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]

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

相关问题 更多 >

    热门问题