我有一个包含2列的数据集,如下所示:
|group| |sequence|
A BX
A X
B SFS
B BCX
B BSS*B1S
A BBX
我想要一些方法来分组和找到每个角色的频率,得到这样的东西:
|group| |char| |freq|
A B 3
A X 3
B S 5
...
最佳答案
您可以使用有效的基于重复的解决方案,然后使用groupby:
from itertools import chain
# Step 1 - flatten your dataframe
df = pd.DataFrame({
'group' : df['group'].repeat(df.sequence.str.len()),'char' : list(chain.from_iterable(df.sequence.tolist()))
})
# Step 2 - filter out characters and groupby on `group`
df[df.char.str.isalpha()].groupby(['group','char']).size().reset_index(name='freq')
group char freq
0 A B 3
1 A X 3
2 B B 3
3 B C 1
4 B F 1
5 B S 5
6 B X 1