如何创建统计字符出现次数的列并合并至Pandas DataFrame
解决字符计数并合并到Pandas DataFrame的问题
我来帮你搞定这个问题!你的现有代码存在几个关键问题,导致没办法正确填充每行的字符计数:
- 每次循环里的
T_C[i[0]]=i[1]是给整列赋值,而不是当前行,所以最后只会保留最后一次循环的结果 - 没有处理当前行未出现的字符,比如某行只有A时,B列应该显示0,但你的代码不会生成这个值
Temp_cab变量没有被用到,属于冗余代码
改进方案:用apply+Counter优雅实现
咱们用更简洁高效的方式来实现需求,代码如下:
import pandas as pd from collections import Counter # 初始化原始数据 C_det = pd.DataFrame(['A','B','AA','BB','ABB'], columns=['C_Dk']) # 定义字符统计函数:确保返回A和B的计数,未出现的字符填0 def count_ab_chars(s): char_counter = Counter(s) # 用get方法获取计数,不存在则返回0 return {'A': char_counter.get('A', 0), 'B': char_counter.get('B', 0)} # 对每个字符串应用统计函数,转换为DataFrame后和原数据合并 char_count_df = C_det['C_Dk'].apply(count_ab_chars).apply(pd.Series) final_df = pd.concat([C_det, char_count_df], axis=1) # 查看结果 print(final_df)
运行结果
执行后你会得到符合预期的DataFrame:
C_Dk A B 0 A 1 0 1 B 0 1 2 AA 2 0 3 BB 0 2 4 ABB 1 2
通用扩展(支持任意字符)
如果你的数据里不止A和B,还包含其他字符,可以用下面的通用版本,自动识别所有出现过的字符并统计:
import pandas as pd from collections import Counter C_det = pd.DataFrame(['A','B','AA','BB','ABB','AC'], columns=['C_Dk']) # 提取所有出现过的唯一字符 all_unique_chars = set(''.join(C_det['C_Dk'])) def count_all_chars(s): char_counter = Counter(s) return {char: char_counter.get(char, 0) for char in all_unique_chars} char_count_df = C_det['C_Dk'].apply(count_all_chars).apply(pd.Series) final_df = pd.concat([C_det, char_count_df], axis=1) print(final_df)
这个版本会自动处理所有出现的字符,比如上面的例子会生成A、B、C三列的计数。
内容的提问来源于stack exchange,提问作者Newton Khan
相关产品推荐
相关产品推荐

