我想在Python中合并一些'n'表。每个表有 2 列。目前,我正在尝试使用这 3 个表(table12、table13、table23)。
Context:我有某些图像文件,每个图像里面都有一些对象,这些对象被标记为“A”,“B”,“C”等。 如果我比较 2 个图像,我会得到一个等价表,该表告诉图像 1 中的哪个对象与图像 2 中的哪个对象相似。 (例如,table12 的第一行表明 image1 的对象“A”和 image2 的对象“P”相同) 有可能一个图像中的对象在另一图像中没有等效的对象。
我想创建一个表,利用所有这些表。最终合并表中的列数=图像数。意味着,在每一列下,都会提到它的对象,并且在同一行中,我们可以找到哪些对象是相似的。
我尝试了pandas合并(合并2个表,然后在第一个和第二个表的合并上合并第三个表),但它给出的结果如下:
请帮忙。
如果你想测试,这里是代码:
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')
您的逻辑不清楚,但假设表格要保持原始顺序并且顶部对齐,您可能应该
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