使用python合并表

问题描述 投票:0回答:1

我想在Python中合并一些'n'表。每个表有 2 列。目前,我正在尝试使用这 3 个表(table12、table13、table23)。

Description Image

Context:我有某些图像文件,每个图像里面都有一些对象,这些对象被标记为“A”,“B”,“C”等。 如果我比较 2 个图像,我会得到一个等价表,该表告诉图像 1 中的哪个对象与图像 2 中的哪个对象相似。 (例如,table12 的第一行表明 image1 的对象“A”和 image2 的对象“P”相同) 有可能一个图像中的对象在另一图像中没有等效的对象。

我想创建一个表,利用所有这些表。最终合并表中的列数=图像数。意味着,在每一列下,都会提到它的对象,并且在同一行中,我们可以找到哪些对象是相似的。

我尝试了pandas合并(合并2个表,然后在第一个和第二个表的合并上合并第三个表),但它给出的结果如下:

Obtained result.

请帮忙。

如果你想测试,这里是代码:

import pandas as pd
import numpy as np

table12 = pd.DataFrame({
    'img1': ['A', 'B', 'C', 'D', np.NaN, np.NaN], 
    'img2': ['P', np.NaN, 'Q', np.NaN, 'R', 'S']
})

table13 = pd.DataFrame({
    'img1': ['A', 'B', 'C', 'D', np.NaN, np.NaN], 
    'img3': [np.NaN, 'X', np.NaN, 'Y', 'Z', 'W']
})

table23 = pd.DataFrame({
    'img2': ['P', np.NaN, 'Q', np.NaN, 'R', np.NaN, 'S'],
    'img3': [np.NaN, 'X', np.NaN, 'Y', 'Z', 'W', np.NaN]
})

merged_12_13 = pd.merge(table12, table13, on='img1', how='outer')

final_output = pd.merge(merged_12_13, table23, on=['img2', 'img3'], how='outer')
python python-3.x pandas dataframe numpy
1个回答
0
投票

您的逻辑不清楚,但假设表格要保持原始顺序并且顶部对齐,您可能应该

concat
各个列:

pd.concat([table12[['img1']], table23[['img2']], table13[['img3']]], axis=1)

或者,将所有列作为输入并删除重复项:

pd.concat([table12, table13, table23], axis=1).T.groupby(level=0).first().T

输出:

  img1 img2 img3
0    A    P  NaN
1    B  NaN    X
2    C    Q  NaN
3    D  NaN    Y
4  NaN    R    Z
5  NaN    S    W
6  NaN  NaN  NaN
© www.soinside.com 2019 - 2024. All rights reserved.