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