我有几个看起来像这样的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
答案 0 :(得分:2)
让我们使用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
答案 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