You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DataFrame映射另一DataFrame列名的船舶分配问题咨询

嘿,我看你在做船舶分配问题的研究,用两个0-1的Pandas DataFrame来关联缓冲区、槽位和船舶对吧?刚好可以用buffers_slots来完成对slots_vessels列标签的映射翻译,我给你一步步拆解怎么做:

用buffers_slots映射slots_vessels列标签的步骤

1. 先提取缓冲区与槽位的对应关系

因为buffers_slots每行求和为1,意味着每个缓冲区唯一对应一个槽位。我们可以直接提取每行值为1的列名,就是该缓冲区绑定的槽位:

# 生成缓冲区→槽位的映射Series,索引是Buffer名称,值是对应槽位号
buffer_to_slot = buffers_slots.idxmax(axis=1)

比如你的示例里,Buffer #24对应的槽位就是8,这个Series会把所有缓冲区的对应关系都存下来。

2. 根据需求翻译slots_vessels的列标签

接下来分两种常见场景处理:

场景1:slots_vessels的列是槽位号,要替换为对应的缓冲区名称

如果slots_vessels的列是槽位(比如5、7、8这类),我们需要先反转映射关系,得到槽位→缓冲区的对应表,再重命名列:

# 反转映射:槽位号 → 对应的缓冲区名称
slot_to_buffer = buffer_to_slot.reset_index().set_index(0)['index']

# 重命名slots_vessels的列
slots_vessels_renamed = slots_vessels.rename(columns=slot_to_buffer)

注意:如果一个槽位对应多个缓冲区(比如多个缓冲区都在同一个槽位制备),上面的代码会保留最后一个匹配的缓冲区。如果想把同一个槽位的所有缓冲区列出来,可以用分组聚合:

# 把同一槽位的缓冲区合并成列表
slot_to_buffer = buffer_to_slot.groupby(buffer_to_slot).agg(list)

# 重命名列时把列表转成逗号分隔的字符串
slots_vessels_renamed = slots_vessels.rename(
    columns=lambda slot: ', '.join(slot_to_buffer.get(slot, [str(slot)]))
)

场景2:slots_vessels的行索引是槽位号,要替换为缓冲区名称

如果slots_vessels的行是按槽位划分的,直接用映射替换索引就行:

slots_vessels_renamed = slots_vessels.rename(index=buffer_to_slot)

3. 验证映射结果

最后可以打印处理后的DataFrame,确认标签是否正确映射:

print(slots_vessels_renamed.head())

内容的提问来源于stack exchange,提问作者multipitch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:41:20