首页 > 解决方案 > 从另一个数据框中搜索(行值)数据

问题描述

我有两个数据框,分别是 df1 和 df2。
在一个数据框中,我有一个搜索值列表(实际上是 Col1)

Col1   Col2
A1      val1, val2
B2      val4, val1
C3      val2, val5

我有另一个数据框,其中有一个项目列表

value   items
val1    apples, oranges
val2    honey, mustard
val3    banana, milk
val4    biscuit
val5    chocolate

我想遍历第一个 DF 并尝试使用该 val 作为键来搜索来自第二个 DF 的项目

预期输出:

A1     apples, oranges, honey, mustard
B2     biscuit, appleas, oranges
C3     honey, mustard, chocolate

我能够将值添加到数据框中并遍历第一个 DF

for index, row in DF1:
     #list to hold all the values
     finalList = []
     list = df1['col2'].split(',')
     for i in list:
          print(i)

我只需要帮助从第二个数据帧中获取值。将不胜感激任何帮助。谢谢。

标签: python-3.xpandasdataframe

解决方案


想法是使用 lambda 函数split并通过字典查找:

d = df2.set_index('value')['items'].to_dict()

df1['Col2'] = df1['Col2'].apply(lambda x: ', '.join(d[y] for y in x.split(', ') if y in d))
print (df1)
  Col1                             Col2
0   A1  apples, oranges, honey, mustard
1   B2         biscuit, apples, oranges
2   C3        honey, mustard, chocolate

items如果值解决方案中有列表,则通过展平进行更改:

d = df2.set_index('value')['items'].to_dict()

f = lambda x: ', '.join(z for y in x.split(', ') if y in d for z in d[y])
df1['Col2'] = df1['Col2'].apply(f)
print (df1)
  Col1                       Col2
0   A1            apples, oranges
1   B2   biscuit, apples, oranges
2   C3  honey, mustard, chocolate

推荐阅读