将PyTorch预测合并到原始 Dataframe

d7v8vwbk  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(170)

我已经从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。

o8x7eapl

o8x7eapl1#

1.首先将Tensor转换为 Dataframe 。
1.然后通过堆叠来重塑 Dataframe 以匹配原始形状,并删除索引的第二级并创建新索引。
1.最后,将原始 Dataframe 和整形后的y_pred Dataframe 合并到qid列。

y_pred = pd.DataFrame(tensor).replace(-1, np.nan)

y_pred = y_pred.stack().reset_index(level=1, drop=True).to_frame('y_pred').reset_index()

merged_df = original_df.merge(y_pred, on='qid', how='left')

使用merged_df将创建一个额外的列索引,如果你不想要它,你可以使用drop()方法:

merged_df = merged_df.drop('index', axis=1)
kh212irz

kh212irz2#

感谢您发布的答案。我可能没有正确指定问题,但我能够使用您的建议。最后一步是(在遵循您的建议重塑y_pred之后),而不是使用merge我必须简单地分配列如下:

merged_df['y_pred'] = y_pred .values

再次感谢!

相关问题