You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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'])

我给你两种简单的实现方法,都能精准得到你要的预期输出:


方法一:拆分展开 + 交叉表统计

这种方法步骤清晰,适合理解整个统计过程:

  1. 先把sequence列按空格拆分成列表,再用explode把每个字符单独拆成一行
  2. 用pd.crosstab来统计每个id和字符的对应频次
  3. 最后可以指定列的顺序,和你的预期输出完全匹配

代码如下:

# 拆分序列并将每个字符展开为单独行
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:42:50