当字典键是列表时,将字典映射到数据帧

问题描述 投票:3回答:3

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

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

我想将字典映射到我的数据帧的col1。

col1    
 a     
 c     

如果col1的值是我的字典值中的一个,那么我想用字典键的值替换col1的值。

像这样,我的数据框将变为:

col1
 1
 2

提前致谢

python python-3.x pandas dictionary dataframe
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)

o / p:

a is in D[1]
b is in D[1]
c is in D[2]
d is in D[2]
© www.soinside.com 2019 - 2024. All rights reserved.