当字典的键是列表时,将字典映射到数据框中

3

我有一个字典,其中值是列表:

dict = {1: ['a','b'], 2:['c', 'd']}

我想将字典映射到我的数据框的col1列上。
col1    
 a     
 c     

如果 col1 的值在我的字典值之一中,那么我想用字典键的值替换 col1 的值。
像这样,我的数据框将变成:
col1
 1
 2

thanks in advance


1
列表不可哈希,不能将其用作字典键。可能你指的是元组或其他可迭代和可哈希的对象。 - Mazdak
抱歉,我混淆了键和值。已编辑问题。 - anticavity123
1
好的,现在请您更新问题,并附上您尝试过的代码,告诉我们目前遇到的问题。 - Mazdak
你正在使用字典的反向方式,从值到键,这不是字典的使用情况。 - Giacomo Catenazzi
3个回答

2
我会以正确的方式转换字典:
mapping = {}
for key, values in D.items():
    for item in values:
        mapping[item] = key

然后

df['col1'] = df['col1'].map(mapping)

1
你也可以尝试使用stack+reset_indexset_indexmap
d = pd.DataFrame({1: ['a','b'], 2:['c', 'd']})
mapping = d.stack().reset_index().set_index(0)["level_1"]
s = pd.Series(['a', 'c'], name="col1")  
s.map(mapping)
0    1
1    2
Name: col1, dtype: int64

逐步演示
d.stack()

0  1    a
   2    c
1  1    b
   2    d
dtype: object

d.stack().reset_index()

    level_0 level_1 0
0   0          1    a
1   0          2    c
2   1          1    b
3   1          2    d

d.stack().reset_index().set_index(0)

   level_0  level_1
0       
a       0        1
c       0        2
b       1        1
d       1        2

最后,我们选择level_1列作为我们传递给map函数的映射。

0

你是指像这样吗?

D = {1 : ['a', 'b'], 2 : ['c', 'd']}

for key, value in D.items():
    for each in value:
        if each in D[key]:
            print(each, "is in D[%s]" % key)

输出:

a is in D[1]
b is in D[1]
c is in D[2]
d is in D[2]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接