python - 根据现有字典将字典条目的数据帧转换为所有条目的数据帧

标签 python pandas dictionary word-count

我有一个 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).astype(int)

或者使用 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).astype(int)

或者ast.literal_eval :

from ast import literal_eval

Final = pd.DataFrame([{WordDict.get(k, None): v for k,v in literal_eval(f'{{{s}}}').items()}
                      for s in Original['words']], index=Original['id']
                     ).fillna(0, downcast='infer')

输出:

    A  B  C  D
id            
1   2  3  1  0
2   0  2  0  3

关于python - 根据现有字典将字典条目的数据帧转换为所有条目的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77051578/

相关文章:

Python子进程如何确定子进程是否挂起?

python - Django 重新发送激活链接,缺少 1 个必需的位置参数 : 'user'

python - 在 Pandas 中将 float 转换为字符串

data-structures - 你会在 python 中使用什么 `n to n` 关系?

python - 将样式化的 pandas 数据框导出到 excel

python - 解析 X509 专有名称

python - 使用 2 个数据帧的 IP 列和日期范围用 df2 中的数据填充 df1 数据帧

python - Pandas 和 Matplotlib - fill_between() 与 datetime64

java - android OSM/OSMdroid 打开街道 map 不离线加载图 block

python - 如何(或是否有可能)使用列表来提取 Python 中的嵌套字典?