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

时间:2018-03-05 18:40:03

标签: python python-3.x pandas dictionary dataframe

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

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

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

col1    
 a     
 c     

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

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

col1
 1
 2

提前致谢

3 个答案:

答案 0 :(得分:2)

我会以正确的方式转换字典:

mapping = {}
for key, values in D.items():
    for item in values:
        mapping[item] = key

然后

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

答案 1 :(得分: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函数的映射。

答案 2 :(得分: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]