如何为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):将未出现字符的计数填充为0pd.concat([df, count_df], axis=1):横向合并原数据与计数列
内容的提问来源于stack exchange,提问作者Richard Pena
相关产品推荐
相关产品推荐

