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

如何为DataFrame字符串列生成对应字符计数列?

解决方案

你可以通过两种高效的方式实现需求,以下是具体代码和说明:

方法一:逐个字符统计(适合已知目标字符的场景)

如果明确只需要统计A、B、C、D四个字符的出现次数,直接使用str.count()方法逐个生成对应列,代码简洁且性能优异:

import pandas as pd

# 示例原始DataFrame
df = pd.DataFrame({'str_col': ['AABCD', 'ABBD', 'CCDA', 'DDD']})

# 为每个目标字符生成计数列
df['A'] = df['str_col'].str.count('A')
df['B'] = df['str_col'].str.count('B')
df['C'] = df['str_col'].str.count('C')
df['D'] = df['str_col'].str.count('D')

# 查看结果
print(df)

输出结果:

str_col  A  B  C  D
0   AABCD  2  1  1  0
1    ABBD  1  2  0  1
2    CCDA  1  0  2  1
3     DDD  0  0  0  3

方法二:自动统计所有字符(适合字符不确定的场景)

如果字符串中可能包含其他字符,且你需要灵活筛选目标列,可以结合collections.Counter实现自动计数:

from collections import Counter
import pandas as pd

# 示例原始DataFrame
df = pd.DataFrame({'str_col': ['AABCD', 'ABBD', 'CCDA', 'DDD']})

# 对每行字符串进行字符计数,转成DataFrame
count_df = df['str_col'].apply(lambda x: pd.Series(Counter(x)))

# 保留目标列A、B、C、D,缺失值填充为0并转为整数
count_df = count_df.reindex(columns=['A', 'B', 'C', 'D']).fillna(0).astype(int)

# 合并原DataFrame与计数结果
result_df = pd.concat([df, count_df], axis=1)

# 查看结果
print(result_df)

代码说明:

  • Counter(x):统计单行字符串中各字符的出现次数,返回字典格式
  • pd.Series(Counter(x)):将字典转为Series,字符自动成为列名,计数为对应值
  • reindex(columns=['A', 'B', 'C', 'D']):确保只保留需要的目标列,同时固定列顺序
  • fillna(0):将未出现字符的计数填充为0
  • pd.concat([df, count_df], axis=1):横向合并原数据与计数列

内容的提问来源于stack exchange,提问作者Richard Pena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:35:25