如何在 Pandas 或 Python 中根据某些条件放置项目?
Posted
技术标签:
【中文标题】如何在 Pandas 或 Python 中根据某些条件放置项目?【英文标题】:How to place the items based on some conditions in Pandas or Python? 【发布时间】:2021-12-21 02:40:53 【问题描述】:我对 python 并不陌生,我在编写一些棘手的代码时面临挑战和错误。如果您能提供帮助,那就太好了:
场景: 我有两个数据集如下: 一种是:
Location
0 loc1
1 loc2
2 loc3
3 loc4
4 loc5
5 loc6
6 loc7
7 loc8
8 loc9...and so on.
还有一个是:
Item Rank Weight
0 1001 1 18
1 1002 2 21
2 1003 3 20
3 1004 4 7
4 1005 5 27
5 1006 6 20
6 1007 7 11
7 1008 8 31
8 1009 9 30
9 1010 10 23 and so on
我想创建一个函数来根据每个项目的排名和重量为其分配一个插槽。其中排名 1 表示高,而最高的数字表示 100,表示排名最低。
如果排名最高,即我需要将项目放置到第一个位置。以及排名第二高的项目到第二位置,依此类推。但是在放置位置时,我还会检查权重是否超过 25,如果超过 25,那么我不想将它们分配在 loc4、loc5 和 loc6
例如:如果我有 1005 排名为 5 但重量为 27 大于 25,那么我不会将它们放置在 loc4 或 loc5 或 loc6 位置。我会把它放在下一个可用的位置。
预期输出:
Item Rank Weight Location
0 1001 1 18 loc1
1 1002 2 21 loc2
2 1003 3 20 loc3
3 1004 4 7 loc4
4 1005 5 27 loc7
5 1006 6 20 loc5
6 1007 7 11 loc6
7 1008 8 31 loc8
8 1009 9 30 loc9
9 1010 10 23 loc10
请帮忙
【问题讨论】:
为什么 1010 有 loc10 而没有 loc7? @Corralien 因为找到第 9 级项目之后的下一个可用位置是 loc10 对吗?而 1010 排名第 10,这就是为什么 但是 1010 的权重是 23,低于 25,而位置 1008 和 1009 的权重大于 25。我不明白为什么 (1005, 1006, 1007) 与 (1008, 1009, 1010) 大于 25 的重量更重,这就是我不将它们放在 loc4、loc5 和 loc6 上的原因。因为 loc4、loc5、loc6 是机架顶部。而其余的位置不是机架顶部的一部分。这样我就可以放更重的东西了 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:好的,假设您的项目位于 list
或 tuples
中(为了清楚起见,您可能需要使用 namedtuples
):
items = [(1001,1,18), (1002,2,21), (1003,3,20), (1004,4,7), (1005,5,27), (1006,6,20), (1007,7,11), (1008,8,31), (1009,9,30), (1010,10,23)]
让我们建立一个位置dict
:
locations = loc: None for loc in range(1,20)
那么我们只需要知道哪些位置是“顶部”,它们可以接受的最大重量是多少,然后我们开始:
toplocs=[4,5,6]
maxweight = 25
for i in sorted(items, key=lambda x:x[1]):
if i[2] > maxweight:
newloc = next(loc for loc,v in locations.items() if v is None and loc not in toplocs)
else:
newloc = next(loc for loc,v in locations.items if v is None)
locations[newloc] = i[0]
【讨论】:
嘿,当我使用 pandas 数据帧而不是元组和列表时,它给我一个错误 如果你想使用 pandas,你必须调整语法——数据帧不是简单的 Python 序列对象(但你仍然可以应用相同的逻辑)以上是关于如何在 Pandas 或 Python 中根据某些条件放置项目?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Pandas 从 Excel 中读取某些列 - Python