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

时间:2017-08-17 19:02:57

标签: python-3.x pandas dataframe counting

我有几个看起来像这样的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

2 个答案:

答案 0 :(得分:2)

让我们使用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

答案 1 :(得分:1)

如果您将数据框列为列表,请在pd.concat上使用['Sequence', 'Group']和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