从另一个熊猫数据框中查找值,其中列中的值为值列表

时间:2020-05-27 18:38:56

标签: python pandas dataframe

我有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,但运气不好,无法获得预期的结果。 如何进行查找?

0 个答案:

没有答案