You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含编码词计数的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')

实现步骤与代码

通过拆分字符串、编码映射、重塑表结构三步即可完成转换:

  1. 拆分words列中的编码-计数对,将每个对展开为单独行
  2. 分离编码和计数数值,用映射字典替换编码为实际词汇
  3. 将长表转为宽表,缺失值填充为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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:52:21