如何优化Pandas中按逗号拆分字符串列拆行后长表转宽表的实现
Pandas字符串列拆分转宽表优化实现方案
方案1:基于explode逻辑的优化版
原有逻辑核心思路可用,仅需补充空格处理、简化冗余步骤即可得到预期结果:
import pandas as pd data = {'id':["ab3e3", "psdds2", "pas13", "ccdf2", "dsda1"], 'fruit':["apple, organge", "others", "dragon fruit, organge", "watermelon", "others"]} df = pd.DataFrame(data) res = ( # 拆分时直接匹配逗号加可选空格,自动消除拆分后元素前导空格 df.assign(fruit=df['fruit'].str.split(',\s*')) .explode('fruit') # 用pivot_table直接统计频次,无需手动加计数列,缺失值自动填0 .pivot_table(index='id', columns='fruit', aggfunc='size', fill_value=0) .reset_index() # 去除列名的索引前缀,输出格式和预期完全一致 .rename_axis(columns=None) )
方案2:极简实现(推荐)
该场景属于典型的多标签编码场景,直接用Pandas内置的str.get_dummies方法即可一步完成转换,代码量更少、运行效率更高:
res = df.set_index('id')['fruit'].str.get_dummies(sep=', ').reset_index()
两种方案输出均完全匹配预期结果。
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

