如何基于Pandas DataFrame计算字符共现矩阵
如何计算Pandas序列中各字符的出现次数并生成频次数据框
嘿,我来帮你搞定这个需求!你需要把每个id对应的字符序列统计出每个字符的出现次数,最终生成和你给出的格式一致的频次表格对吧?
先来看你的原始数据:
import pandas as pd corpus = pd.DataFrame([[1, 'A B C A D B A'], [2, 'B A B B C B A']], columns=['id', 'sequence'])
我给你两种简单的实现方法,都能精准得到你要的预期输出:
方法一:拆分展开 + 交叉表统计
这种方法步骤清晰,适合理解整个统计过程:
- 先把
sequence列按空格拆分成列表,再用explode把每个字符单独拆成一行 - 用
pd.crosstab来统计每个id和字符的对应频次 - 最后可以指定列的顺序,和你的预期输出完全匹配
代码如下:
# 拆分序列并将每个字符展开为单独行 df_expanded = corpus.assign(character=corpus['sequence'].str.split()).explode('character') # 生成交叉表,统计每个id下各字符的出现次数 frequency_table = pd.crosstab(df_expanded['id'], df_expanded['character']) # 调整列的顺序,和预期输出一致 frequency_table = frequency_table[['A', 'B', 'C', 'D']] print(frequency_table)
运行后输出就是:
character A B C D id 1 3 2 1 1 2 2 4 1 0
方法二:用str.get_dummies快速实现
这个方法更简洁,核心代码一步到位:
利用str.get_dummies按空格拆分序列并生成哑变量,然后按id分组求和,直接得到频次统计:
# 生成哑变量后按id分组求和 frequency_table = corpus['sequence'].str.get_dummies(sep=' ').groupby(corpus['id']).sum() # 同样调整列顺序匹配预期 frequency_table = frequency_table[['A', 'B', 'C', 'D']] print(frequency_table)
这个方法的输出和上面完全一样,适合追求代码简洁的场景。
内容的提问来源于stack exchange,提问作者Pranab
相关产品推荐
相关产品推荐

