如何将DataFrame中存储列表的列转为统计各值出现次数的单独列
有比嵌套遍历更优的实现,用pandas原生向量化操作即可,代码更简洁,执行效率也更高,尤其适合数据量较大的场景。
方案1:explode + pivot_table(兼容性最强)
import pandas as pd presence_data = pd.DataFrame({ "id": ["id1", "id2"], "presence": [ ["A", "B", "C", "A"], ["G", "A", "B", "I", "B"], ] }) result = ( # 将presence列的列表拆分为一行一个元素 presence_data.explode('presence') # 按id分组,统计每个元素的出现次数,缺失值填充为0 .pivot_table(index='id', columns='presence', aggfunc='size', fill_value=0) # 把id从索引转回普通列,同时清除列名的额外索引标识 .reset_index() .rename_axis(columns=None) )
方案2:str.get_dummies(代码更简短)
result = ( presence_data.join( # 把列表用分隔符拼接为字符串后直接生成哑变量计数 presence_data['presence'].str.join('|').str.get_dummies() ) # 删除原始的presence列 .drop('presence', axis=1) )
如果你的列表元素包含|字符,换一个不会出现在元素里的分隔符即可,或者直接用方案1避免冲突。
两种方案输出的结果都和你需要的目标格式完全一致。
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

