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}