我有一个 pandas 数据框,其中包含一个 id 和不同编码单词的相关计数。例如:
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'}
我想做的是创建一个新的数据框,将计数映射到所有可能单词的列,所以它看起来像:
Final =pd.DataFrame(data=[[1,2,3,1,0],[2,0,2,0,3]], columns=['id','A','B','C','D']).set_index('id')
我知道我可以将原始的“单词”列拆分为单独的列,并且可以从 WordDict 创建一个数据框,以便它具有所有可能的列,但无法弄清楚如何创建映射。
DataFrame
构造函数:
import re
Final = pd.DataFrame([{WordDict.get(int(k), None): v
for k,v in re.findall('([^:,]+):([^:,]+)', s)}
for s in Original['words']], index=Original['id']
).fillna(0)
或与
split
:
Final = pd.DataFrame([{WordDict.get(int(k), None): v
for x in s.split(',')
for k,v in [x.split(':')]}
for s in Original['words']], index=Original['id']
).fillna(0)
输出:
A B C D
id
1 2 3 1 0
2 0 2 0 3