如何统计Pandas字符串列表Series并将计数追加至DataFrame每行
解决方法
针对你需要把列表列中各字符串的出现次数转为对应列的需求,这里有两种高效的实现方式,避免循环导致的性能问题:
方法1:用explode + 交叉表(适合大数据量)
利用pandas的内置展开和交叉统计功能,效率远高于手动循环:
import pandas as pd # 基于原DataFrame的'info'列处理 # 1. 把每行的列表拆成单行,保留原行索引 exploded_data = df['info'].explode() # 2. 统计每行每个字符串的出现次数 count_table = pd.crosstab(exploded_data.index, exploded_data) # 3. 合并回原DataFrame,空值填0并转成整数 final_df = df.join(count_table).fillna(0).astype(int)
方法2:结合Counter与Series(贴近你的原思路)
直接对每行应用Counter,转成Series后自动匹配所有唯一列,不用手动生成空表:
import pandas as pd from collections import Counter # 对每行的列表统计次数,转成Series(缺失的列自动为NaN) count_series = df['info'].apply(lambda lst: pd.Series(Counter(lst))) # 合并到原表,空值填0转整数 final_df = df.join(count_series.fillna(0).astype(int))
关于你之前的问题
用df.at()逐个赋值的方式,在数据量稍大时会因为循环次数过多,占用大量内存和CPU,导致Notebook崩溃。上面两种方法都是pandas的向量化操作,内部做了性能优化,不会出现这类问题。
内容的提问来源于stack exchange,提问作者JTega
相关产品推荐
相关产品推荐

