在多个数据帧中按相同顺序查找行

Find row by same sequence among multiple dataframes

我想按列在多个 pandas 数据帧中找到相同的序列及其行。

例如,在column3中找到它们。

Table一个

column1, column2, column3
 1,         a,      p1 
 2,         c,      p3
 3,         d,      P4
 4,         b,      p2

Table B

column1, column2, column3
 1,         x,      p20 
 2,         x,      p20 
 3,         y,      p3
 4,         z,      P4
 5,         w,      p7

您可以看到 P3P4 在两个表中的排列相同。我想分别识别和 select 它们的行。请考虑我有 100 多个表,它必须可用于两个以上。

有人可以帮助我吗?谢谢!

这里有一些代码可以满足您的需求。在本例中,我生成了包含 100 个条目的 40 个随机列并搜索序列匹配项。由于 pandas 迭代非常慢,您可能希望将每个表中的最后一列拉出到一个单独的列表列表中。

import numpy as np

def findall(row, value):
    for i,v in enumerate(row):
        if v == value:
            yield i

table_list = list( np.random.randint(0,25,size=100) for _ in range(40))

# For each table in the list:
for idxA, tblA in enumerate(table_list):
    # For each remaining table:
    for idxB, tblB in enumerate(table_list[idxA+1:]):
        # For each starting point in the first table:
        for a0 in range(len(tblA)-1):
            # Search for that value.
            for b0 in findall( tblB, tblA[a0] ):
                match = 1
                # Count how long the match is.
                a99 = len(tblA) - a0
                b99 = len(tblB) - b0
                for dx in range(min(a99,b99)):
                    if tblA[a0+dx] != tblB[b0+dx]:
                        break
                    match += 1
                if match > 2:
                    print( f"Sequence of {match} at table {idxA} row {a0} and table {idxB+idaX+1} row {b0}" )