我有2个熊猫数据框。
d1
d1 = [
{'col1': 'aaa', 'col2': ['qqq'], 'col3': ['www'], 'col4': ['a','b','c','d']},
{'col1': 'bbb', 'col2': [], 'col3': ['www1', 'www2'], 'col4': ['b']},
{'col1': 'ccc', 'col2': ['qqq', 'qqq1'], 'col3': [], 'col4': ['d','e']},
{'col1': 'ddd', 'col2': ['qqq2', 'qqq3'], 'col3': ['www2', 'www4'], 'col4': ['f', 'g']},
{'col1': 'eee', 'col2': [], 'col3': ['www5'], 'col4': []}
]
col1 col2 col3 col4
0 aaa [qqq] [www] [a, b, c, d]
1 bbb [] [www1, www2] [b]
2 ccc [qqq, qqq1] [] [d, e]
3 ddd [qqq2, qqq3] [www2, www4] [f, g]
4 eee [] [www5] []
d2
d2 = [
{'c1': '1', 'c2': 'a'},
{'c1': '1', 'c2': 'b'},
{'c1': '1', 'c2': 'c'},
{'c1': '1', 'c2': 'd'},
{'c1': '1', 'c2': 'e'},
{'c1': '1', 'c2': 'f'},
{'c1': '1', 'c2': 'g'},
{'c1': '1', 'c2': 'x'},
{'c1': '1', 'c2': 'y'},
{'c1': '1', 'c2': 'z'}
]
c1 c2
0 1 a
1 1 b
2 1 c
3 1 d
4 1 e
5 1 f
6 1 g
7 1 x
8 1 y
9 1 z
对于d2
中的每一行,我想根据列c2
的值来查找d1.col4
中是否有任何值。由于d1.col4
将列表作为值,因此需要在列表中进行搜索。
如果d1.col4列表中有任何条目,则需要从d1.col1, d1.col2, d1.col3
取值并将它们作为列表添加到d2
的新列中
预期结果应为:
res = [
{'c1': '1', 'c2': 'a', 'col1_d1': ['aaa'], 'col2_d1': ['qqq'], 'col3_d1': ['www']},
{'c1': '1', 'c2': 'b', 'col1_d1': ['aaa', 'bbb'], 'col2_d1': ['qqq'], 'col3_d1': ['www', 'www1',
'www2']},
{'c1': '1', 'c2': 'c', 'col1_d1': ['aaa'], 'col2_d1': ['qqq'], 'col3_d1': ['www']},
{'c1': '1', 'c2': 'd', 'col1_d1': ['aaa', 'ccc'], 'col2_d1': ['qqq', 'qqq1'], 'col3_d1': ['www']},
{'c1': '1', 'c2': 'e', 'col1_d1': ['ccc'], 'col2_d1': ['qqq', 'qqq1'], 'col3_d1': []},
{'c1': '1', 'c2': 'f', 'col1_d1': ['ddd'], 'col2_d1': ['qqq2', 'qqq3'], 'col3_d1': ['www2', 'www4']},
{'c1': '1', 'c2': 'g', 'col1_d1': ['ddd'], 'col2_d1': ['qqq2', 'qqq3'], 'col3_d1': ['www2', 'www4']},
{'c1': '1', 'c2': 'x', 'col1_d1': [], 'col2_d1': [], 'col3_d1': []},
{'c1': '1', 'c2': 'y', 'col1_d1': [], 'col2_d1': [], 'col3_d1': []},
{'c1': '1', 'c2': 'z', 'col1_d1': [], 'col2_d1': [], 'col3_d1': []}
]
c1 c2 col1_d1 col2_d1 col3_d1
0 1 a [aaa] [qqq] [www]
1 1 b [aaa, bbb] [qqq] [www, www1, www2]
2 1 c [aaa] [qqq] [www]
3 1 d [aaa, ccc] [qqq, qqq1] [www]
4 1 e [ccc] [qqq, qqq1] []
5 1 f [ddd] [qqq2, qqq3] [www2, www4]
6 1 g [ddd] [qqq2, qqq3] [www2, www4]
7 1 x [] [] []
8 1 y [] [] []
9 1 z [] [] []
我知道如何通过将数据帧转换成字典d1.to_dict('records'), d2.to_dict('records')
然后处理字典来做到这一点,但这不是有效的方法。
我试图在d1上爆炸,然后合并d1和d2,然后合并groupby,但运气不好,无法获得预期的结果。 如何进行查找?