如何将多个数据帧相互添加并找到重复的行数?
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.concat
和 groupby
:
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
我有几个看起来像这样的 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.concat
和 groupby
:
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