Python 通过将字典的值与数据帧的列相匹配,有条件地进行选择

Python 通过将字典的值与数据帧的列相匹配,有条件地进行选择,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,我有一本字典如下: dict = {0: [a,b,d,c], 3:[w,v,t,e],...} col1 col2 col3 a d 10 a b 5 a c 20 b a 5 b d 3 b c 8 d a 10 d b 3 d c 12 c a 20 c b

我有一本字典如下:

dict = {0: [a,b,d,c],
        3:[w,v,t,e],...}
col1   col2   col3
a      d      10
a      b      5
a      c      20
b      a      5
b      d      3
b      c      8
d      a      10
d      b      3
d      c      12
c      a      20
c      b      8
c      d      12
col1 col2 col3 key
a    b    5     0
a    d    10    0
a    c    20    0
b    d    3     0
b    c    8     0
d    c    12    0
数据帧如下所示:

dict = {0: [a,b,d,c],
        3:[w,v,t,e],...}
col1   col2   col3
a      d      10
a      b      5
a      c      20
b      a      5
b      d      3
b      c      8
d      a      10
d      b      3
d      c      12
c      a      20
c      b      8
c      d      12
col1 col2 col3 key
a    b    5     0
a    d    10    0
a    c    20    0
b    d    3     0
b    c    8     0
d    c    12    0
我想映射dictionary值中的每个唯一组合以匹配col1和col2,然后选择col3并附加键。 结果如下:

dict = {0: [a,b,d,c],
        3:[w,v,t,e],...}
col1   col2   col3
a      d      10
a      b      5
a      c      20
b      a      5
b      d      3
b      c      8
d      a      10
d      b      3
d      c      12
c      a      20
c      b      8
c      d      12
col1 col2 col3 key
a    b    5     0
a    d    10    0
a    c    20    0
b    d    3     0
b    c    8     0
d    c    12    0

您可以从字典列表中获取组合,从长度为2组合的扁平列表中构建数据帧,并与数据帧合并:

from itertools import combinations

d = {0: ['a','b','d','c'],
     3: ['w','v','t','e']}

combs = [(k,*i) for k,v in d.items() for i in list(combinations(v, r=2))]
# [(0, 'a', 'b'), (0, 'a', 'd'), (0, 'a', 'c')...
pd.DataFrame(combs, columns=['key','col1','col2']).merge(df, on=['col1','col2'])

  key col1 col2  col3
0   0    a    b     5
1   0    a    d    10
2   0    a    c    20
3   0    b    d     3
4   0    b    c     8
5   0    d    c    12