如何将多个数据帧相互添加并找到重复的行数?

How to add several dataframes to each other and find the number of rows that are repeats?

我有几个看起来像这样的 pandas 数据框。对于此示例,这里有 3 个:

    Sequence  Group
    SGF       1
    AVQ       2
    SGQ       3
    AIT       4

    Sequence  Group
    SGF       1
    AVQ       2
    AAI       3
    CBT       4

    Sequence  Group
    SGF       1
    AVQ       2
    SGQ       3
    AIE       4

有没有办法将所有数据帧加在一起,然后为每个序列计算一个序列在集合中出现了多少次?

预期输出:

    Sequence   Group    Number of Times
    SGF        1        3
    AVQ        2        3
    SGQ        3        2
    AAI        3        1
    AIT        4        1
    AIE        4        1

让我们使用 pd.concatgroupby:

pd.concat([df1,df2,df3]).groupby(['Sequence','Group'])\
                        .agg({'Sequence':'size'})\
                        .rename(columns={'Sequence':'Number of Times'})\
                        .reset_index()\
                        .sort_values(by=['Number of Times','Group'], ascending=[False,True])

输出:

  Sequence  Group  Number of Times
5      SGF      1                3
3      AVQ      2                3
6      SGQ      3                2
0      AAI      3                1
1      AIE      4                1
2      AIT      4                1
4      CBT      4                1

如果您将数据帧作为列表,请在 ['Sequence', 'Group'] 上使用 pd.concat 和 groupby 并使用 size

进行计数
In [398]: pd.concat([d1, d2, d3]).groupby(['Sequence', 'Group']).size()
Out[398]:
Sequence  Group
AAI       3        1
AIE       4        1
AIT       4        1
AVQ       2        3
CBT       4        1
SGF       1        3
SGQ       3        2
dtype: int64

要对它们进行排序,请使用 sort_values

In [399]: (pd.concat([d1, d2, d3]).groupby(['Sequence', 'Group']).size()
             .reset_index(name='Times')
             .sort_values(by=['Times', 'Group'], ascending=[False, True]))
Out[399]:
  Sequence  Group  Times
5      SGF      1      3
3      AVQ      2      3
6      SGQ      3      2
0      AAI      3      1
1      AIE      4      1
2      AIT      4      1
4      CBT      4      1