以下是几种呈现结果的不同方式。
应用
groupby.sum
函数来对字符串进行拼接,之后我们可以使用
pd.value_counts
函数。
df = pd.DataFrame({'group': ['A', 'A', 'B', 'B', 'B', 'A'],
'sequence': ['BX', 'X', 'SFS', 'BCX', 'BSS*B1S', 'BBX']})
res = df.groupby('group')['sequence'].sum().map(list).apply(pd.value_counts)\
.fillna(0).astype(int).reset_index()
res = res.loc[:, res.columns.str.isalpha()]
print(res)
res2 = pd.melt(res, id_vars=['group']).sort_values(['group', 'variable'])
res2 = res2[res2['value'] != 0].set_index(['group', 'variable'])
print(res2)
使用 collections.Counter
可以实现更高效的变体:
from collections import Counter
res = df.groupby('group')['sequence'].sum().apply(Counter).apply(pd.Series)\
.fillna(0).astype(int).reset_index()