从数据帧获取字典 哪些行包含许多值?



Input

df 
A         B
a         23
b,c       34
d,e,%f    30

目标

df_dct = {'a':23,'b':34,'c':34,'d':'30','e':'30','f':30}

详情如下:

  • A作为键,B作为值
  • A中的值是字符串,有些值按','
  • 分组
  • 键来自拆分',',并且应该替换所有'%'和空格。

尝试

  • 我知道使用zip从两个数据帧获取字典,但无法处理拆分。

您可以使用df.explode()df.to_dict()一起pandas >= 0.25

In [32]: df.A = df.A.str.replace("%", "")
In [42]: df_dct = df.assign(var1=df['A'].str.split(',')).explode('var1').drop('A', 1).set_index('var1').to_dict()['B'] 
In [43]: df_dct
Out[43]: {'a': 23, 'b': 34, 'c': 34, 'd': 30, 'e': 30, 'f': 30}

用 str 替换从 A 列中删除百分比

df["A"] = df.A.str.replace("%", "")

使用 itertools 的产品获取 A 和 B 中每行每个元素的配对,然后使用链将它们组合成一个列表

from itertools import product, chain
#apply dict to get your final result
dict(chain.from_iterable((product(A.split(","),[B])) for A,B in df.to_numpy()))
{'a': 23, 'b': 34, 'c': 34, 'd': 30, 'e': 30, 'f': 30}

相关内容

最新更新