如何将含编码词计数的DataFrame转换为全词映射宽表
编码词汇计数的DataFrame转换方案
问题背景
现有一个包含id和编码词对应计数的pandas DataFrame:
import pandas as pd Original = pd.DataFrame(data=[[1,'1:2,2:3,3:1'],[2,'2:2,4:3']], columns=['id','words'])
同时有编码与实际词汇的映射字典:
WordDict = {1:'A',2:'B',3:'C',4:'D'}
需要生成新的DataFrame,将所有实际词汇作为列,对应位置填充计数,无对应计数则填0,最终目标效果如下:
Final =pd.DataFrame(data=[[1,2,3,1,0],[2,0,2,0,3]], columns=['id','A','B','C','D']).set_index('id')
实现步骤与代码
通过拆分字符串、编码映射、重塑表结构三步即可完成转换:
- 拆分
words列中的编码-计数对,将每个对展开为单独行 - 分离编码和计数数值,用映射字典替换编码为实际词汇
- 将长表转为宽表,缺失值填充为0,最终设置
id为索引
完整可运行代码:
import pandas as pd Original = pd.DataFrame(data=[[1,'1:2,2:3,3:1'],[2,'2:2,4:3']], columns=['id','words']) WordDict = {1:'A',2:'B',3:'C',4:'D'} # 拆分words列并展开为多行 df = Original.assign(words=Original['words'].str.split(',')).explode('words') # 拆分编码与计数,转换为整数类型 df[['code', 'count']] = df['words'].str.split(':', expand=True).astype(int) # 映射编码为实际词汇 df['word'] = df['code'].map(WordDict) # 重塑为宽表,填充缺失计数为0 final_df = df.pivot_table(index='id', columns='word', values='count', fill_value=0).reset_index() # 调整列顺序与目标一致(可选操作) final_df = final_df[['id'] + list(WordDict.values())].set_index('id') print(final_df)
运行后输出结果:
A B C D id 1 2 3 1 0 2 0 2 0 3
内容的提问来源于stack exchange,提问作者Adam W.
相关产品推荐
相关产品推荐

