我已经从PyTorch模型中获得了预测,作为具有以下形状的Tensor(torch.Size([2958,96]))。我的原始数据集有2958个qids,其中一些最大文档数为96(最小为47)。预测用-1填充了缺失的一个。我的原始 Dataframe 的形状是(221567,7)。
我想使用qid将PyTorch模型或Tensor的预测合并回这个 Dataframe 。Tensor的每一行表示一个qid,而每一列表示该特定文档的排名(基于每个qid中文档的顺序)。
下面是一个min示例(将Tensor转换为df后):
tensor = {'0': ['3', '1','2'],'1': ['2', '1','2'],'2': ['2', '1','-1']}
y_pred = pd.DataFrame(tensor)
data = {'qid': ['0', '0','0','1', '1','1','2', '2'],'irrelevant_col': ['foo', 'foo','foo','foo', 'bar','bar','bar', 'bar']}
original_df = pd.DataFrame(data)
请注意,对于qid==2,只有2行,因此Tensor在第2行和第2列中具有'-1'。此外,Tensor的顺序是正确的,因为它与dataframe中的项的顺序相匹配。这是目标输出:
target = {'qid': ['0', '0','0','1', '1','1','2', '2'],'irrelevant_col': ['foo', 'foo','foo','foo', 'bar','bar','bar', 'bar'],'y_pred': ['3', '2','2','1', '1','1','2', '2']}
target_df = pd.DataFrame(target)
编辑:我修复了一个不正确的列(2而不是3,并使最后一个y_pred为-1。
2条答案
按热度按时间o8x7eapl1#
1.首先将Tensor转换为 Dataframe 。
1.然后通过堆叠来重塑 Dataframe 以匹配原始形状,并删除索引的第二级并创建新索引。
1.最后,将原始 Dataframe 和整形后的
y_pred
Dataframe 合并到qid
列。使用
merged_df
将创建一个额外的列索引,如果你不想要它,你可以使用drop()
方法:kh212irz2#
感谢您发布的答案。我可能没有正确指定问题,但我能够使用您的建议。最后一步是(在遵循您的建议重塑y_pred之后),而不是使用merge我必须简单地分配列如下:
再次感谢!